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();
}
}
ただし、フィボナッチ関数を計算するための低機能な方法である点を除けば(実際に使用される単純で、高速な線形アルゴリズムが存在します)、最小のサブタスクが小さすぎて分割することができないため、これは性能的に劣る可能性があります。代わりに、ほぼすべての分岐/結合アプリケーションと同様に、分割するのではなく、常に連続的に解く場合に使用する、何らかの最小の粒度サイズ(たとえば、ここでは10)を選択します。コンストラクタと説明 |
---|
RecursiveTask() |
修飾子と型 | メソッドと説明 |
---|---|
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
ForkJoinTask.join()
によって返される結果を返します。このタスクが実行されたかどうかが不明の場合は、null
です。このメソッドは、デバッグを支援したり、拡張機能をサポートするためのものです。これをほかのコンテキストで使用することは推奨されていません。getRawResult
、クラス: ForkJoinTask<V>
null
(完了しない場合)protected final void setRawResult(V value)
ForkJoinTask
setRawResult
、クラス: ForkJoinTask<V>
value
- 値protected final boolean exec()
exec
、クラス: ForkJoinTask<V>
true
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.