Future和promise的原理

  • 1.netty 有自己的Future和promise接口,他们都是继承jdk的future接口。
  • 2.netty的future的接口主要是提供了addListener和removeListener等接口,listener对象是jdk的future对象。
  • 3.而netty为了channel 又额外写了一个channelFuture接口 该接口 可以获取channel ,然后也提供了addListener和removeListener等接口,不过这些listener都是netty的future对象。
  • 4.我们可以看到我们channelfure添加了监听者,但是不可以设置这次操作的结果。所以这就是netty提供了promise接口的原因。该接口除了提供addListener和removeListener,同时提供了tryXX和setXX。这两个方法可以设置我们操作是成功还是失败了等。
  • 5.所以我们netty为啥要这三个接口尼?很简单,因为netty有很多异步操作,而为了管理异步操作我们需要提供监听者,而我们监听者需要根据我们操作的结果进行相应的操作。比如我们writeAndFlush的操作 我们想知道我们操作是否成功,完成还是失败等。那么我们操作成功之后通过promise的tryXX和setXX操作进行回调。而在这些回调过程中我们可能还需要用到我们的channel。所以这时候netty写 了一个新的接口ChannelPromise即继承了channel接口和promise接口,从而通过promise来实现回调,回调需要的channel从我们channel接口中获取。netty有一个专门的实现类DefaultChannelPromise。
  • 6.那netty是如何知道操作成功,失败或者取消的尼?原来netty通过AtomicReferenceFieldUpdater来修改DefaultPromise类中一个Object属性的对象,当我们调用成功
    tryXX和setXX方法就会获取监听该promise或者futrue的listener,然后回调他们的future的operationComplete方法

猜你喜欢

转载自blog.csdn.net/weixin_33967071/article/details/87461962
今日推荐