Netty的Future和Promise

Netty的Future和Promise教程

Future 是 Java 的原生的 API 中提供的接口,用来记录异步执行状态,Future 的 get() 方法会判断任务是否执行完成,如果完成就会立刻返回执行结果,如果没有完成则一直阻塞,直到任务完成再返回。Netty 则在原来的基础上进行了扩展,它在其基础上拓展了监听器接口,通过监听器可以让异步执行更加有效率,不需要调用 get() 方法等待异步执行结束,而是通过监听器回调来精确地控制异步执行结束时间。

Promise 接口也是一个 Future 的扩展接口,它表示一种可写的 Future,可以自定义设置执行的结果。

ChannelFuture

因为 Netty 中的 Future 都是和异步的 I/O 操作相关的,所以命名为 ChannelFuture,代表它与 Channel 操作相关。在 netty 里面,所有的 I/O 操作都是异步的,异步调用有一个问题,就是如果获取操作结果?ChannelFuture 的设计就是为了用来获取异步调用的结果的。

ChannelFuture 有两种状态:uncompleted 和 completed。当开始一个 I/O 操作时,一个新的 ChannelFuture 就被创建,此时它处于 uncompleted 状态——非失败、非成功、非取消,因为 I/O 操作此时还没有完成。一旦 I/O 操作完成,ChannelFuture 将会被设置成 co mpleted,它有以下三种可能:

  1. 操作成功
  2. 操作失败
  3. 操作被取消

Promise

promise 是可写的 Future,Future 自身并没有写操作相关的接口,Netty 通过 Promise 对 Future 进行扩展,用于设置 I/O 操作的结果。

Netty的Future和Promise总结

Netty 的 Future 和 Promise 都是 JDK 自带的 Future 上面进行扩展,用来更好的对异步执行结果进行接收。Future 通过添加监听器来接收异步线程执行结果,Promise 通过对 Future 的扩展,对执行结果进行修改。