public static class selectmaxproblem
public int solvesequentially()
return max;
}public selectmaxproblem subproblem(int substart, int subend)
@override
public string tostring() ",start,end);}}
public static class maxwithfj extends recursiveaction
protected void compute() else
}public static void main(string args)
selectmaxproblem problem = new selectmaxproblem(numbers,0,numbers.length);
int threshold = 10;
int nthreads = 2;
maxwithfj mfj = new maxwithfj(problem, threshold);
forkjoinpool fjpool = new forkjoinpool(nthreads);
fjpool.invoke(mfj);
int result = mfj.result;
print("main",result);
}static void print(string pre,object object)
}
輸出結果:
thread[11] p > p|p
thread[11] p > fork
thread[11] p > begin left join
thread[12] p > p|p
thread[12] p > fork
thread[12] p > begin left join
thread[13] p > p|p
thread[13] p > fork
thread[13] p > begin left join
thread[12] p > p|p
thread[13] p > return result:29
thread[12] p > fork
thread[13] p > after left join.begin rigth join
thread[12] p > begin left join
thread[12] p > return result:4
thread[13] p > return result:39
thread[12] p > after left join.begin rigth join
thread[13] p > join
thread[12] p > return result:9
thread[13] p > return result:19
thread[12] p > join
thread[12] p > after left join.begin rigth join
thread[12] p > join
thread[11] p > after left join.begin rigth join
thread[11] p > join
thread[1] main > 39
說明:1.recursiveaction#fork代表用新的執行緒來執行
2.recursiveaction#join會讓當前執行緒開始等待.這裡和普通的thread#join的區別是,執行緒在呼叫join函式時,會去執行別的任務.可以從輸出看到編號12和13的執行緒,join後再執行子任務.
函式指標例子說明
在c c 中存在著函式指標,即指向函式的指標。我目前已知的兩種使用方法是 cpp view plain copy include include typedef int pinnt define pp int intfunca inta,intb intfuncb int a,int b intma...
執行緒 十三 ForkJoin
到這裡,關於 completablefuture 的基本使用你已經了解的差不多了,不知道你是否注意,我們前面說的帶有 sync 的方法是單獨起乙個執行緒來執行,但是我們並沒有建立執行緒,這是怎麼實現的呢?細心的朋友如果仔細看每個變種函式的第三個方法也許會發現裡面都有乙個 executor 型別的引數...
Fork Join實現排序邏輯
排序問題是我們工作中的常見問題。目前也有很多現成演算法是為了解決這個問題而被發明的,例如多種插值排序演算法 多種交換排序演算法。而並歸排序演算法是目前所有排序演算法中,平均時間複雜度較好 o nlgn 演算法穩定性較好的一種排序演算法。它的核心演算法思路將大的問題分解成多個小問題,並將結果進行合併。...