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方法實際上是沒有執行完的。

相關文章
相關標籤/搜索