java.lang.Object
java.util.concurrent.ForkJoinTask<V>
java.util.concurrent.RecursiveTask<V>
- すべての実装されたインタフェース:
Serializable
,Future<V>
public abstract class RecursiveTask<V> extends ForkJoinTask<V>
結果を生成する再帰的な
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();
}
}
ただし、フィボナッチ関数を計算するための低機能な方法である点を除けば(実際に使用される単純で、高速な線形アルゴリズムが存在します)、最小のサブタスクが小さすぎて分割することができないため、これは性能的に劣る可能性があります。 代わりに、ほぼすべての分岐/結合アプリケーションと同様に、分割するのではなく、常に連続的に解く場合に使用する、何らかの最小の粒度サイズ(たとえば、ここでは10)を選択します。 - 導入されたバージョン:
- 1.7
- 関連項目:
- 直列化された形式
-
コンストラクタのサマリー
コンストラクタ コンストラクタ 説明 RecursiveTask()
-
メソッドのサマリー
クラス java.util.concurrent.ForkJoinTaskで宣言されたメソッド
adapt, adapt, adapt, cancel, compareAndSetForkJoinTaskTag, complete, completeExceptionally, fork, get, get, getException, getForkJoinTaskTag, getPool, getQueuedTaskCount, getRawResult, getSurplusQueuedTaskCount, helpQuiesce, inForkJoinPool, invoke, invokeAll, invokeAll, invokeAll, isCompletedAbnormally, isCompletedNormally, join, peekNextLocalTask, pollNextLocalTask, pollSubmission, pollTask, quietlyComplete, quietlyInvoke, quietlyJoin, reinitialize, setForkJoinTaskTag, setRawResult, tryUnfork
クラス java.lang.Objectで宣言されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
インタフェース java.util.concurrent.Futureで宣言されたメソッド
isCancelled, isDone
-
コンストラクタの詳細
-
RecursiveTask
public RecursiveTask()
-
-
メソッドの詳細
-
compute
protected abstract V compute()このタスクによって実行される主な計算です。- 戻り値:
- 計算の結果
-
exec
protected final boolean exec()RecursiveTaskのための実行規則を実装します。- 定義:
exec
、クラス:ForkJoinTask<V>
- 戻り値:
- このタスクが正常に完了したことがわかっている場合は
true
-