111 CompletableFuture 詳解

CompletableFuture類實現了CompletionStage和Future接口。Future是Java 5添加的類,用來描述一個異步計算的結果,可是獲取一個結果時方法較少,要麼經過輪詢isDone,確認完成後,調用get()獲取值,要麼調用get()設置一個超時時間。可是這個get()方法會阻塞住調用線程,這種阻塞的方式顯然和咱們的異步編程的初衷相違背。
爲了解決這個問題,JDK吸取了guava的設計思想,加入了Future的諸多擴展功能造成了CompletableFuture。編程

  1. thenApply 進行變換  
  2. thenAccept 進行消耗  
  3. thenRun 對上一步的計算結果不關心,執行下一個操做。
  4. thenCombine 結合兩個CompletionStage的結果,進行轉化後返回
  5. thenAcceptBoth 結合兩個CompletionStage的結果,進行消耗
  6. runAfterBoth 在兩個CompletionStage都運行完執行。
  7. applyToEither 兩個CompletionStage,誰計算的快,我就用那個CompletionStage的結果進行下一步的轉化操做。
  8. acceptEither 兩個CompletionStage,誰計算的快,我就用那個CompletionStage的結果進行下一步的消耗操做。
  9. runAfterEither 兩個CompletionStage,任何一個完成了都會執行下一步的操做(Runnable)
  10. exceptionally 當運行時出現了異常,能夠經過exceptionally進行補償。
  11. whenComplete 當運行完成時,對結果的記錄。這裏的完成時有兩種狀況,一種是正常執行,返回值。另一種是遇到異常拋出形成程序的中斷。這裏爲何要說成記錄,由於這幾個方法都會返回CompletableFuture,當Action執行完畢後它的結果返回原始的CompletableFuture的計算結果或者返回異常。因此不會對結果產生任何的做用。app

  12. handle運行完成時,對結果的處理。這裏的完成時有兩種狀況,一種是正常執行,返回值。另一種是遇到異常拋出形成程序的中斷。異步

 

https://www.jianshu.com/p/6f3ee90ab7d3異步編程

https://www.jianshu.com/p/6ee694cfb54bspa

 

20 個使用 Java CompletableFuture 的例子

 ***************  https://mp.weixin.qq.com/s/R2tLbygElx0jzB2DIGdL2Q線程

相關文章
相關標籤/搜索