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