概述
一个递归的带结果的ForkJoinTask。 例如,这是一个计算斐波那契数列的任务:
class Fibonacci extends RecursiveTask<Integer> {
final int n;
Fibonacci(int n) { this.n = n; }
protected 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();
}
}
然而,除了是计算斐波那契数列的愚蠢方法(实际上有一个简单的快速线性算法)外,它很可能表现不佳,因为最小的子任务太小,不值得分裂。相反,就像几乎所有的fork / join应用程序一样,您会选择一个最小的粒度大小(例如这里的10),始终顺序解决而不是细分。
分享到: