1、在Netty中的作用
- Netty中的IO操作都是异步进行的,并不能和同步一样立即知道消息是否被正确处理
- Netty为IO操作注册一个监听,当IO操作成功或者不成功的时候都会自动触发注册的监听事件
- Future和ChannelFuture就是为监听IO事件服务的,不敢IO操作成功不成功都会返回一个ChannelFuture
2、Future
- Netty的Future接口继承了JDK的Future接口,同时提供了更多的方法
public interface Future<V> extends java.util.concurrent.Future<V> {
boolean isSuccess();
Throwable cause();
Future<V> addListener(GenericFutureListener<? extends Future<? super V>> listener);
Future<V> removeListener(GenericFutureListener<? extends Future<? super V>> listener);
Future<V> sync() throws InterruptedException;
Future<V> await() throws InterruptedException;
V getNow();
}
3、ChannelFuture
- ChannelFuture继承了Netty的Future接口,代表 Netty channel的I/O操作的执行结果。
- 在Netty中所有的I/O操作都是异步的,会立即返回一个代表I/O操作的结果,即ChannelFuture。
- 在获得执行结果时,推荐使用添加监听器,监听执行完成事件operaionCompleted,而不要使用await方法。
- 在ChannelHandler中调用await,会造成死锁。因为ChannelHandler中的方法通常是I/O线程调用的,再调用await会造成I/O阻塞。