public class ForkJoinTaskExample extends RecursiveTask {
// 阈值
public static final int threshold=2; //也可以设置为服务器的核数,有相关的计算io/cpu核心数的介绍。
private int start;
private int end ;
public ForkJoinTaskExample(int start,int end){
this.start=start;
this.end=end;
}
@Override
protected Integer compute() {
int sum =0;
boolean canCompute=(end-start)<=threshold;
if (canCompute){
for (int i=start;i<=end;i++){
sum+=i;
}
}else {
// 如果任务大于阈值,就分裂成两个子任务计算
int middle=(start+end)/2;
ForkJoinTaskExample example = new ForkJoinTaskExample(start, middle);
ForkJoinTaskExample example1 = new ForkJoinTaskExample(middle + 1, end);
//执行子任务
example.fork();
example1.fork();
//等待任务结束后合并任务
Integer join = example.join();
Integer join1 = example1.join();
sum=join+join1;
}
return sum;
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
ForkJoinPool forkJoinPool=new ForkJoinPool();
ForkJoinTaskExample example = new ForkJoinTaskExample(1, 100);
Future<Integer> submit = forkJoinPool.submit(example);
System.out.println(submit.get());
}