package com.example.fj;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.concurrent.RecursiveTask;
/**
* @ClassName ForkJoinDemo
* @description: TODO
* @author: went
* @Date 2021/7/15 9:48 上午
**/
public class ForkJoinDemo {
public static void main(String[] args) throws ExecutionException, InterruptedException {
ForkJoinPool pool = new ForkJoinPool();
final MyTask myTask = new MyTask(1, 100);
final ForkJoinTask<Integer> submit = pool.submit(myTask);
final Integer result = submit.get();
System.out.println(result);
}
}
class MyTask extends RecursiveTask<Integer> {
private int begin;
private int end;
private int result;
public MyTask(int begin, int end) {
this.begin = begin;
this.end = end;
}
@Override
protected Integer compute() {
if (end - begin > 10) {
// 继续拆
Integer mid = (end + begin)/2;
MyTask left = new MyTask(begin, mid);
MyTask right = new MyTask(mid+1, end);
left.fork();
right.fork();
result = left.join() + right.join();
} else {
// 直接算
for (int i = begin; i <= end ; i++) {
result += i;
}
System.out.println(Thread.currentThread().getName() + " 计算结果:" + result);
}
return result;
}
}
ForkJoinDemo
最新推荐文章于 2025-05-12 10:01:53 发布