public abstract class RecursiveTask<V> extends ForkJoinTask<V>
ForkJoinTask
。
对于一个典型的例子,这里是一个任务计算斐波纳契数字:
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(); } }
然而,除了计算斐波纳契函数的一种愚蠢的方法(有一个简单的快速线性算法,您将在实践中使用),这很可能表现不佳,因为最小的子任务太小而不能被分解。
相反,正如几乎所有fork / join应用程序的情况一样,您可以选择一些最小粒度大小(例如,在此为10),您始终依次解决而不是细分。
Constructor and Description |
---|
RecursiveTask() |
Modifier and Type | Method and Description |
---|---|
protected abstract V |
compute()
这个任务执行的主要计算。
|
protected boolean |
exec()
实现RecursiveTask的执行约定。
|
V |
getRawResult()
返回由
ForkJoinTask.join() 返回的结果,即使此任务异常完成,或
null 如果此任务未知已完成。
|
protected void |
setRawResult(V value)
强制给定的值作为结果返回。
|
adapt, adapt, adapt, cancel, compareAndSetForkJoinTaskTag, complete, completeExceptionally, fork, get, get, getException, getForkJoinTaskTag, getPool, getQueuedTaskCount, getSurplusQueuedTaskCount, helpQuiesce, inForkJoinPool, invoke, invokeAll, invokeAll, invokeAll, isCancelled, isCompletedAbnormally, isCompletedNormally, isDone, join, peekNextLocalTask, pollNextLocalTask, pollTask, quietlyComplete, quietlyInvoke, quietlyJoin, reinitialize, setForkJoinTaskTag, tryUnfork
protected abstract V compute()
public final V getRawResult()
ForkJoinTask
getRawResult
在类别
ForkJoinTask<V>
null
如果没有完成
protected final void setRawResult(V value)
ForkJoinTask
复制
setRawResult
在类别
ForkJoinTask<V>
value
- 值
protected final boolean exec()
exec
在类别
ForkJoinTask<V>
true
如果此任务已知已正常完成