ForkJoin任务拆分 public class TestForkJoinSum { public static void main(String[] args) { ForkJoinPool forkJoinPool = new ForkJoinPool(); ForkJoinSumTask task = new ForkJoinSumTask(0L, 50L); Long invoke = forkJoinPool.invoke(task); System.out.println(invoke); } } /** * RecursiveAction 没有返回值 * RecursiveTask 有返回值 */ class ForkJoinSumTask extends RecursiveTask<Long> { private long start; private long end; //临界值 private static final long CRITICAL_VALUE = 25L; public ForkJoinSumTask(long start, long end) { this.start = start; this.end = end; } @Override protected Long compute() { long length = end - start; if (length <= CRITICAL_VALUE) { long sum = 0L; for (long i = start; i <= end; i++) { sum += i; } return sum; } else { long middle = (start + end) / 2; ForkJoinSumTask left = new ForkJoinSumTask(start, middle); left.fork();//进行拆分,同时压入线程队列 ForkJoinSumTask right = new ForkJoinSumTask(middle + 1, end); right.fork(); return left.join() + right.join(); } } }