package com.koala.learn.threadlearn.chapter6;
import lombok.SneakyThrows;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.concurrent.RecursiveTask;
/**
* @Description TODO
* @Date 2022/2/28 21:51
* @Created by koala
*/
public class CountTask extends RecursiveTask<Integer> {
private static final int THRESHOLD=2;
private int start;
private int end;
public CountTask(int start,int end){
this.start = start;
this.end = end;
}
protected Integer compute() {
int sum = 0;
Boolean flag = (end-start) <= THRESHOLD;
if(flag){
// sum = ((start+end)/2)*3;
for (int i=start;i<=end;i++){
sum+=i;
}
}else{
int mid = (start+end)/2;
CountTask leftTask = new CountTask(start, mid);
CountTask rightTask = new CountTask(mid+1, end);
leftTask.fork();
rightTask.fork();
int leftResult = leftTask.join();
int rightResult = rightTask.join();
sum = leftResult + rightResult;
}
return sum;
}
public static void main(String[] args) {
ForkJoinPool forkJoinPool = new ForkJoinPool();
CountTask countTask = new CountTask(1, 4);
ForkJoinTask<Integer> submit = forkJoinPool.submit(countTask);
System.out.println(submit.get());
}
}