import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.concurrent.RecursiveTask;
public class ForkJoinExample {
//针对一个数字做计算
private static final Integer MAX = 200;
static class CalaForkJoinTask extends RecursiveTask<Integer>{
private Integer startValue; // 子任务开始计算的值
private Integer endValue; // 子任务结束计算的值
public CalaForkJoinTask(Integer startValue, Integer endValue){
this.startValue = startValue;
this.endValue = endValue;
}
@Override
protected Integer compute() {
if(endValue - startValue < MAX){
// 不拆分
System.out.println("开始计算 " + startValue +" ~ " + endValue);
Integer total = 0;
for (int i = startValue ; i <= endValue ; i++){
total += i;
}
return total;
}else{
CalaForkJoinTask subTask1 = new CalaForkJoinTask(startValue, (startValue+endValue)/2);
subTask1.fork();
CalaForkJoinTask subTask2 = new CalaForkJoinTask((startValue+endValue)/2 + 1, endValue);
subTask2.fork();
return subTask1.join() + subTask2.join();
}
}
}
public static void main(String[] args) {
CalaForkJoinTask cal = new CalaForkJoinTask(1,10000);
ForkJoinPool pool = new ForkJoinPool();
ForkJoinTask<Integer> taskFuture = pool.submit(cal);
try {
Integer result = taskFuture.get();
System.out.println("retult " + result);
} catch (InterruptedException e) {
throw new RuntimeException(e);
} catch (ExecutionException e) {
throw new RuntimeException(e);
}
}
}
Java多线程-ForkJoin代码示例
最新推荐文章于 2024-08-04 17:16:44 发布