ChannelFuture的作用是用来保存Channel异步操作的结果。
我们知道,在Netty中所有的I/O操作都是异步的。这意味着任何的I/O调用都将立即返回,而不保证这些被请求的I/O操作在调用结束的时候已经完成。取而代之地,你会得到一个返回的ChannelFuture实例,这个实例将给你一些关于I/O操作结果或者状态的信息。
对于一个ChannelFuture可能已经完成,也可能未完成。当一个I/O操作开始的时候,一个新的future对象就会被创建。在开始的时候,新的future是未完成的状态--它既非成功
、失败
,也非被取消
,因为I/O操作还没有结束。如果I/O操作以成功
、失败
或者被取消
中的任何一种状态结束了,那么这个future将会被标记为已完成
,并包含更多详细的信息(例如:失败的原因)。请注意,即使是失败
和被取消
的状态,也是属于已完成
的状态。
下面这张图来自于官方文档,用于说明各种状态的关系:
ChannelFuture状态关系
各种各样的方法被提供,用来检查I/O操作是否已完成、等待完成,并寻回I/O操作的结果。