九 fork/join CompletableFuture
1: Fork/join
fork/join: fork是分叉的意思, join是合並的意思。
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()獲取值;
要麽調用get()設置一個超時時間。但是這個get()方法會阻塞住調用線程,這種阻塞的方式顯然和我們的異步編程的初衷相違背;
Future
本身並不能提供回調方法. 任務提交到executor,通過Future.isDone和阻塞的Future.get()來看結果是否完成。
3: ExecutorCompletionService
把多個FutureTask提交到ExecutorCompletionService,task執行完的結果放到queue中,ExecutorCompletionService.get() 或者,poll()會從隊列中依次取得
執行完的task, 再進行下一步處理。(這個方法比上面的方法好,上面只能是按照提交的順序依次判斷結果是否完成)
3: CompletableFuture
它能夠將回調放到與任務不同的線程中執行(thenApplyAsync),也能將回調作為繼續執行的同步函數(thenApply),在與任務相同的線程中執行。
它避免了傳統回調最大的問題,那就是能夠將控制流分離到不同的事件處理器中
4: CompletableFutre詳解
待續... ...
https://www.cnblogs.com/tian666/p/7840232.html
九 fork/join CompletableFuture