netty源码解析 Future ChannelFuture

image.png

jdk Future

只能用以下两种方式获取结果:

  1. V get()阻塞等待
  2. 轮询boolean isDone();
  3. 有限等待V get(long timeout, TimeUnit unit)
    执行状态只有两种:
  4. boolean isDone();
  5. boolean isCancelled();

netty Future

可以添加Listenner,使用观察者模式:

Future<V> addListener(GenericFutureListener<? extends Future<? super V>> listener);

由两种阻塞等待执行的方式:

  1. Future<V> sync();
  2. Future<V> await();
    1. 也可以有限等待boolean await(long timeoutMillis)

执行失败时:
调用cause获取异常。

netty ChannelFuture

public interface ChannelFuture extends Future<Void>
  • 由上面范型为Void可知,ChannelFuture 的调用是没有返回值的。

另外,它实现了Future的addListenersync等方法,但返回值都是ChannelFuture

然后,执行状态多了isCancelled

netty ChannelPromise

可以设置执行状态

GenericFutureListener

operationComplete会在I/O线程执行,所以不建议做耗时操作,如果一定要如此,可在新的线程进行。

推荐阅读更多精彩内容