Fork/Join它可以將一個大的任務拆分成多個子任務進行並行處理,最後將子任務結果合併成最後的計算結果,
並進行輸出,Fork/Join框架要完成兩件事情:
Fork: 把一個複雜任務進行拆分,大事化小
Join: 把拆分任務的結果進行合併。
代碼如下:
class MyTask extends RecursiveTask<Integer> { //拆分差值不能超過10,計算10以內運算 private static final Integer VALUE = 10; private int begin; //拆分開始值 private int end; //拆分結束值 private int result; //返回結果 public MyTask(int begin, int end) { this.begin = begin; this.end = end; } @Override protected Integer compute() { //判斷相加兩個數值是否大於10 if((end - begin) <= VALUE) { for(int i = begin; i <= end; i++) { result = result + i; } } else { //進一步拆分 //獲取中間值 int middle = (begin + end) / 2; //拆分左邊 MyTask task01 = new MyTask(begin,middle); //拆分右邊 MyTask task02 = new MyTask(middle + 1,end); //調用方法拆分 task01.fork(); task02.fork(); //合併結果 result = task01.join() + task02.join(); } return result; } } public class ForkJoinDemo { public static void main(String []args) throws ExecutionException, InterruptedException { MyTask myTask = new MyTask(0,100); //創建分支合併池對象 ForkJoinPool forkJoinPool = new ForkJoinPool(); ForkJoinTask<Integer> forkJoinTask = forkJoinPool.submit(myTask); //獲取最終合併之後結果 Integer result = forkJoinTask.get(); System.out.println(result); } }
結果如下: