jdk Future
只能用以下两种方式获取结果:
-
V get()
阻塞等待 - 轮询
boolean isDone();
- 有限等待
V get(long timeout, TimeUnit unit)
执行状态只有两种: boolean isDone();
boolean isCancelled();
netty Future
可以添加Listenner,使用观察者模式:
Future<V> addListener(GenericFutureListener<? extends Future<? super V>> listener);
由两种阻塞等待执行的方式:
Future<V> sync();
-
Future<V> await();
- 也可以有限等待
boolean await(long timeoutMillis)
- 也可以有限等待
执行失败时:
调用cause
获取异常。
netty ChannelFuture
public interface ChannelFuture extends Future<Void>
- 由上面范型为
Void
可知,ChannelFuture 的调用是没有返回值的。
另外,它实现了Future的addListener
、sync
等方法,但返回值都是ChannelFuture
然后,执行状态多了isCancelled
:
netty ChannelPromise
可以设置执行状态
GenericFutureListener
operationComplete
会在I/O线程执行,所以不建议做耗时操作,如果一定要如此,可在新的线程进行。