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