SumTask.java
import java.util.concurrent.RecursiveTask; /** * 定义任务和拆分逻辑 * RecursiveTask<Long> 这个是 有返回值的 * 如果不需要返回值可以用 RecursiveAction */ public class SumTask extends RecursiveTask<Long> { /** * 累加的开始值 */ private int begin; /** * 累加的结束值 */ private int end; public SumTask(int begin, int end) { this.begin = begin; this.end = end; } @Override protected Long compute() { long sum = 0; if (end - begin < 100) { //如果两个数值小于100,就不要继续拆分了 直接相加就行 for (int i = begin; i <= end; i++) { sum += i; } return sum; } else { //如果大于100继续拆分 取中间数拆分 int middle = (begin + end) / 2; SumTask sumTask1 = new SumTask(begin, middle); SumTask sumTask2 = new SumTask(middle + 1, end); //分别执行子任务 sumTask1.fork(); sumTask2.fork(); //取出子任务执行的结果 Long sum1 = sumTask1.join(); Long sum2 = sumTask2.join(); //相加 return sum1 + sum2; } } }
使用
public static void main(String[] args) { ForkJoinPool pool=new ForkJoinPool(4); SumTask sumTask=new SumTask(1,10000); Long sum = pool.invoke(sumTask); System.out.println(sum); }
标签:begin,JAVA,示例,int,SumTask,ForkJoinPool,累加,end From: https://www.cnblogs.com/pxblog/p/18227297