- Fork是对任务的分解,Join对应结果合并
- Fork/Join计算框架主要包含两部分,一部分是分治任务的线程池ForkJoinPool,另一部分是ForkJoinTask。类似ThreadPoolExecutor和Runnable的关系。
- ForkJoinTask有两个子类-- RecursiveAction和RecursiveTask,都定义了抽象方法compute() ,RecursiveTask的compute()有返回值。
- ForkJoinPool工作原理:
- 内部有多个 工作队列, 当调用 ForkJoinPool的 submit()或invoke()提交任务,ForkJoinPool会根据一定的路由规则把任务提交到一个任务队列中,如果任务在执行过程中会创建出子任务,那么子任务会提交到工作线程对应的任务队列中。
- 支持工作窃取
- 斐波那契数列
package forkjoin;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;
class Fibtask extends RecursiveTask<Integer>{
final int n;
Fibtask(int n)
{
this.n = n;
}
@Override
protected Integer compute() {
if (n<=1)return n;
Fibtask f1 = new Fibtask(n-1);
f1.fork();
Fibtask f2 = new Fibtask(n-2);
return f2.compute()+ f1.join();
}
}
public class FibV2 {
public static void main