九 fork/join CompletableFuture

1: Fork/joinhtml

fork/join:  fork是分叉的意思, join是合併的意思。java

Fork/Join框架:是JAVA7提供的一個用於並行執行任務的框架,是一個把大任務分割成若干個小任務,最終彙總每一個小任務結果後獲得大任務結果的框架。編程

Fokr/Join的適合場景:所處理的元素必須是獨立的,數據集要足夠大;併發

                                     而且在並行加速方面,每一個元素的處理成本要足夠高,這樣才能補償創建fork/join框架所消耗的成本。框架

 

這個文章中的例子(http://www.infoq.com/cn/articles/Functional-Style-Callbacks-Using-CompletableFuture)很好的說明了 Future, ExecutorCompletionService,異步

CompletableFuture處理一個圖片下載的例子時候的對比。異步編程

2: Future:函數

     Future是Java 5添加的類,用來描述一個異步計算的結果,可是獲取一個結果時方法較少,要麼經過輪詢isDone,確認完成後,調用get()獲取值;spa

     要麼調用get()設置一個超時時間。可是這個get()方法會阻塞住調用線程,這種阻塞的方式顯然和咱們的異步編程的初衷相違背;線程

      Future自己並不能提供回調方法.  任務提交到executor,經過Future.isDone和阻塞的Future.get()來看結果是否完成。

 

3: ExecutorCompletionService

     把多個FutureTask提交到ExecutorCompletionService,task執行完的結果放到queue中,ExecutorCompletionService.get() 或者,poll()會從隊列中依次取得

     執行完的task, 再進行下一步處理。(這個方法比上面的方法好,上面只能是按照提交的順序依次判斷結果是否完成)

3: CompletableFuture

       它可以將回調放到與任務不一樣的線程中執行(thenApplyAsync),也能將回調做爲繼續執行的同步函數(thenApply),在與任務相同的線程中執行。

       它避免了傳統回調最大的問題,那就是能夠將控制流分離到不一樣的事件處理器中(thenApplyAsync()能夠異步的在不一樣的線程中處理上一步結果)

 4: CompletableFutre詳解

待續... ...

5: java 8的 paralleStream 用 fork/join框架提供了併發執行能力。

待續... ...

6: 

https://www.cnblogs.com/tian666/p/7840232.html

相關文章
相關標籤/搜索