文章目录
1 netty Future的基本使用
编程语言中的future,顾名思义就是一个操作在将来才会完成,但是调用方不必同步等待结果,只要持有对应操作的future对象即可,等操作完成了,从future中获取结果。
netty Future是实现其异步非阻塞IO机制的重要对象。本文从演示netty Future的基本使用开始,再到源码角度分析其实现原理,最后剖析其在netty的异步非阻塞IO中如何使用。
netty Future在jdk Future的基础上进行了扩展,最主要的特色是提供了Listener机制,在future完成后回调listner执行用户指定的操作。其他特性主要是提供sync()方法,以等待future完成后再继续往后做其他事情。(如无特别说明,本文后续所说的future都特指netty future。)
- future的基本使用方式举例:
public class TimeServerHandler extends ChannelInboundHandlerAdapter {
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
final ChannelFuture cf = ctx.writeAndFlush(new UnixTime());
cf.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) throws Exception {
assert cf == future;
ctx.close();
}
});
}
}
- future只有两种状态:未完成与完成,完成后需要用户自己判断future对应的操作最后是成功、失败还是取消:
* +---------------------------+
* | Completed successfully |
* +---------------------------+
* +----> isDone() = true |
* +--------------------------+ | | isSuccess() = true |
* | Uncompleted | | +===========================+
* +--------------------------+ | | Completed with failure |
* | isDone() = false | | +---------------------------+
* | isSuccess() = false |----+----> isDone() = true |
* | isCancelled() = false | | | cause() = non-null |
* | cause() = null | | +===========================+
* +--------------------------+ | | Completed by cancellation |
* | +---------------------------+
* +----> isDone() = true |
* | isCancelled() = true |
* +---------------------------+
2 netty Future实现的原理
2.1 netty Future的继承关系
- 最上面是jdk Future,netty Future继承jdk Future,主要添加了以下几个接口方法:
— boolean isSuccess():判断操作是否成功;
— addListener/removeListener:用于添加删除监听器;
— sync/await:用于阻塞等待Future完成,当sync/await方法返回后,future完成。
- Promise继承自Future,主要添加了如下几个方法,用于设置Future的结果:
— setSuccess(V result) / trySuccess(V result):设置future结果为成功;
— setFailure(Throwable cause) / tryFailure(Throwable cause):设置future结果为失败。
- ChannelFuture继承自Future,添加了Channel channel()方法,用于获取执行IO操作的channel。
- ChannelPromise基本是把Promise接口和ChannelFuture接口合并到一起的接口。
以上是整个Future类体系的概要