Netty的ChannelFuture

在Netty中的全部的I/O操做都是异步执行的,这就意味着任何一个I/O操做会马上返回,不保证在调用结束的时候操做会执行完成。所以,会返回一个ChannelFuture的实例,经过这个实例能够获取当前I/O操做的状态。异步

 

ChannelFuture为完成或未完成状态。完成和未完成可对应的各类I/O操做结果以下所示线程

 

 *                                      + ---------------------------+接口

 *                                      | Completed successfully    |事件

 *                                      + ---------------------------+get

 *                                 + ---->      isDone() = <b>true </b>      |it

 * +--------------------------+    |    |   isSuccess() = <b>true</b>       |io

 * |        Uncompleted       |    |    +===========================+List

 * +--------------------------+    |    | Completed with failure    |方法

 * |      isDone() = <b>false</b>     |    |    +--------------------------- +时间

 * |   isSuccess() = false    | ----+---->    isDone() = <b>true </b>         |

 * | isCancelled() = false    |    |    | getCause() = <b>non- null</b>     |

 * |    getCause() = null     |    |    +===========================+

 * +--------------------------+    |    | Completed by cancellation |

 *                                 |    + ---------------------------+

 *                                 + ---->      isDone() = <b>true </b>      |

 *                                      | isCancelled() = <b>true</b>       |

 *                                      + ---------------------------+

 

经过ChannelFuture能够了解I/O操做的一些额外的详细信息。

 

 

固然,也提供了阻塞当前线程等待I/O执行结果的方法,就是awaitUninterruptibly 。

 

与这个接口紧密相关的是ChannelFutureListener,为特定的事项添加监听器。当事件发生时,会出发监听器指定相应的动做。

 

最后一点要指出调用await系列方法指定的等待超时时间和I/O超时时间之间是没有特定关系的。若是没有设置I/O超时时间,那么可能在await方法超时以后,future方法实际上是没有执行完的。

相关文章
相关标签/搜索