版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Qgwperfect/article/details/88885090
public class ForkJoinRecursiveTask {
private final static int MAX_THRESHOLD = 100;
public static void main(String[] args) {
final ForkJoinPool forkJoinPool = new ForkJoinPool();
ForkJoinTask<Integer> task = forkJoinPool.submit(new CalculateRecursiveTask(0, 1000));
try {
Integer sumResult = task.get();
System.out.println(sumResult);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
@SuppressWarnings({"serial" })
private static class CalculateRecursiveTask extends RecursiveTask<Integer> {
private int start;
private int end;
public CalculateRecursiveTask(int start, int end) {
this.start = start;
this.end = end;
}
@Override
protected Integer compute() {
if (end - start <= MAX_THRESHOLD) {
return IntStream.rangeClosed(start, end).sum();
} else {
int middle = (start + end) / 2;
CalculateRecursiveTask lTask = new CalculateRecursiveTask(start, middle);
CalculateRecursiveTask rTask = new CalculateRecursiveTask(middle+1, end);
lTask.fork();
rTask.fork();
return lTask.join() + rTask.join();
}
}
}
}