fork/join框架是executorservice介面的乙個實現,可以幫助開發人員充分利用多核處理器的優勢,編寫出並行執行的程式,提高應用程式的效能;設計的目的是為了處理那些可以被遞迴拆分的任務。
fork/join框架與其它executorservice
的實現類相似,會給執行緒池中的執行緒分發任務,不同之處在於它使用了工作竊取演算法,所謂工作竊取,指的是對那些處理完自身任務的執行緒,會從其它執行緒竊取任務執行。
fork/join框架的核心是forkjoinpool
類,該類繼承了abstractexecutorservice類。forkjoinpool
實現了工作竊取演算法並且能夠執行forkjointask
任務。
在使用fork/join框架之前,我們需要先對任務進行分割,任務分割**應該跟下面的偽**類似:
if首先,我們會在forkjointask的子類中封裝以上**,不過一般我們會使用更加具體的forkjointask型別,如(任務足夠小)
else
recursivetask
(可以返回乙個結果)或recursiveaction
。
當寫好forkjointask的子類後,建立該物件,該物件代表了所有需要完成的任務;然後將這個任務物件傳給forkjoinpool例項的invoke()去執行即可。
首先,分割任務,只要任務的粒度超過閥值,就不停地將任務分拆為小任務;
然後,將分割的任務任務新增到雙端佇列中,啟動執行緒從雙端佇列獲取任務執行,將執行結果統一放到乙個佇列中;
最後,再啟動乙個執行緒合併結果佇列的值。
fork-join框架涉及的主要類如下:
recursiveaction:用於沒有返回值的任務。
recursivetask:用於需要返回值的任務,通過泛型引數設定計算的返回值型別。
forkjoinpool:提供了一系列的submit方法,計算forkjointask(需要實現computer方法)。
public
class
counttasktmp
extends
recursivetask
@override
protected
integer compute() else
return
sum;
} public
static
void
main(string args) catch
(exception e)
} }
Java併發程式設計指南(五) Fork Join框架
這個框架被設計用來解決可以使用分而治之技術將任務分解成更小的問題。在乙個任務中,檢查你想要解決問題的大小,如果它大於乙個既定的大小,把它分解成更小的任務,然後用這個框架來執行。這個框架基於以下兩種操作 work stealing演算法 當乙個任務正在等待它使用join操作建立的子任務的結 束時,執行...
Fork Join中的呼叫原理
錯誤程式 public class calculator extends recursivetask override protected integer compute else return sum 1 fork 1.基本作用 將任務放入任務佇列隊尾 2.原始碼 public final for...
java7平行計算框架Fork Join
拆分fork 合併join。jdk1.7整合fork join,效能上有大大提公升。思想 充分利用多核cpu把計算拆分成多個子任務,平行計算,提高cpu利用率大大減少運算時間 當你在forkjoinpool中執行forkjointask時,你可以使用同步或非同步方式來實現。當你使用同步方式時,提交任...