分支合併框架
阿新 • • 發佈:2021-07-07
分支合併框架
複雜任務分拆給執行緒,大事化小,最後把拆分結果合併
原理
Fork and Join
相關類
ForkJoinPool 分支合併池
ForkJoinTesk 分支合併任務
RecursiveTask 遞迴任務
package main.java; import java.util.concurrent.ExecutionException; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask; import java.util.concurrent.RecursiveTask; /** * @author : syx * @date : 2021/7/7 11:02 * @version :v1.0 */ public class ForJoi { public static void main(String[] args) throws ExecutionException, InterruptedException { MyTesk myTesk1 = new MyTesk(0,100); ForkJoinPool forkJoinPool = new ForkJoinPool(); ForkJoinTask<Integer> task = forkJoinPool.submit(myTesk1); System.out.println(task.get()); } } //從0加到100 class MyTesk extends RecursiveTask<Integer>{ public static final int ADJUST_VALUE = 10; private int begin; private int end; private int result; public MyTesk(int begin, int end) { this.begin = begin; this.end = end; } @Override protected Integer compute() { if ((end-begin)<=ADJUST_VALUE){ for (int i = begin; i <=end; i++) { result = result+i; } }else{ int mid = (begin+end)/2; MyTesk myTesk1 = new MyTesk(begin,mid); MyTesk myTesk2 = new MyTesk(mid+1,end); myTesk1.fork(); myTesk2.fork(); result = myTesk1.join()+myTesk2.join(); } return result; } }