1 ForkJoinPool
用于执行ForkJoinTask的pool,他实现了Executor, ExecutorService接口。
2 ForkJoinTask
l 比thread 更light的threadlike 的 entity,实现了Future接口
l 子类:
RecursiveAction,RecursiveTask
3 RecursiveTask
l 该类是一个抽象类,必须使用时实现computer method
l Code:
class Fibonacci extends RecursiveTask<Integer> {
final int n;
Fibonacci(int n) { this.n = n; }
Integer compute() {
if (n <= 1)
return n;
Fibonacci f1 = new Fibonacci(n - 1);
f1.fork();
Fibonacci f2 = new Fibonacci(n - 2);
return f2.compute() + f1.join();
}
}
4 RecursiveAction
l 实现接口Future<Void>也就是结算不需要返回结果,Task需要返回结果
Code:
class SortTask extends RecursiveAction {
final long[] array; final int lo; final int hi;
SortTask(long[] array, int lo, int hi) {
this.array = array; this.lo = lo; this.hi = hi;
}
protected void compute() {
if (hi - lo < THRESHOLD)
sequentiallySort(array, lo, hi);
else {
int mid = (lo + hi) >>> 1;
invokeAll(new SortTask(array, lo, mid),
new SortTask(array, mid, hi));
merge(array, lo, hi);
}
}
}