JUC forkjoin 分支合并池
案例
package com.wt.forkjoin; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask; import java.util.concurrent.RecursiveTask; /** * @Description: TODO 计算0~100的和,当end-begin>10时,需要拆分 * @Author: 1872428 * @Date: 2025/6/2 16:55 * @Version: 1.0 **/ class MyTask extends RecursiveTask<Integer>{ private static final Integer VALUE = 10; // 不能超过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() { if ((end-begin)<=VALUE){ for (int i = begin; i <= end; i++) { 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 ForkJoinDemon { public static void main(String[] args) { // 创建MyTask对象 MyTask myTask = new MyTask(0, 100); // 创建 分支合并池 对象 ForkJoinPool forkJoinPool = new ForkJoinPool(); ForkJoinTask<Integer> forkJoinTask = forkJoinPool.submit(myTask); // 获取最终合并之后结果 Integer integer = null; try { integer = forkJoinTask.get(); } catch (Exception e) { e.printStackTrace(); } System.out.println(integer); } }