Netty 中 Future 和 Promise 的區別

Future 和 Promise 是非常相似的概念,不同之處在於,Future 是針對尚不存在的結果的只讀容器,而 Promise 可以被寫入(通常只能寫入一次)。可以將Java 8 CompletableFuture和SettableFuture視爲 Promise,因爲可以設置它們的值,但是它們也實現了Future接口,因此對於客戶端而已它們沒什麼區別。

Future 的結果由異步計算的結果確定。請注意,必須使用Callable或Runnable初始化FutureTask(經典的Future),沒有無參數構造函數,並且Future和FutureTask都是從外部只讀的(FutureTask的set方法受保護)。該值將從內部設置爲計算結果。

 

另一方面,Promise 的結果可以由你(或實際上任何人)隨時設置,因爲它具有公共設置方法。可以創建CompletableFuture和SettableFuture,而無需執行任何任務,並且可以隨時設置它們的值。你向客戶代碼發送一個 Promise,並在以後根據需要執行。注意,CompletableFuture不是“純粹的”Promise,可以使用諸如FutureTask之類的任務對其進行初始化,並且它最有用的功能是與處理鏈的步驟無關。

 

總結:

Promise最終被稱爲CompletableFuture,在Java 8中,它的javadoc解釋了:可以明確完成(設置其值和狀態)並可以用作CompletionStage的Future,它支持在完成時觸發的相關功能和操作。

 

原文地址: https://www.zhblog.net/go/java/tutorial/java-netty-difference-future-promise?t=604

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章