前言
Netty 的大部分使用者接口都是異步化的,傳回的都是一個
ChannelFuture
對象。該接口是 Netty 對 JDK 中的
Future
接口擴充而來。和開發者相關比較大的變化是允許添加一個
GenericFutureListener
監聽器,以便在異步任務完成時觸發回調任務。
接口的定義比較簡單,不過如何保證并發的安全性則是一個值得思考的問題。假定在任務完成的瞬間,
addListener
方法被調用,回調方法是否一定被觸發?下面帶着問題來看源碼
類層次
首先讓我們來看下類層次圖。
雖然大部分使用者接口代碼傳回都是 ChannelFuture,但是實際上真正生效的是接口
ChannelPromise
。從
Promise
接口繼承的能力,使得該接口允許設定成功或者失敗辨別。下面在源碼走讀中具體來分析。
源碼走讀
Future
Netty 自定義的
Future
接口,繼承自 JDK 的
Future
接口,不過實際當中使用到的都是自己定義的方法。方法大緻上分為兩類:
- 擷取結果和進行結果等待的,諸如
,sync
等await
- 添加任務回調方法的,諸如
、addListener
addListeners