モジュール java.base
パッケージ java.util.concurrent

クラスRecursiveTask<V>

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

      public RecursiveTask()
      サブクラスが呼び出すためのコンストラクタ。
  • メソッドの詳細

    • compute

      protected abstract V compute()
      このタスクによって実行される主な計算です。
      戻り値:
      計算の結果
    • getRawResult

      public final V getRawResult()
      次のクラスからコピーされた説明: ForkJoinTask
      このタスクが異常な状態で実行された場合であっても、ForkJoinTask.join()によって返される結果を返します。このタスクが実行されたかどうかが不明の場合は、nullです。 このメソッドは、デバッグを支援したり、拡張機能をサポートするためのものです。 これをほかのコンテキストで使用することは推奨されていません。
      定義:
      getRawResult、クラス: ForkJoinTask<V>
      戻り値:
      結果あるいはnull (完了しない場合)
    • setRawResult

      protected final void setRawResult(V value)
      次のクラスからコピーされた説明: ForkJoinTask
      指定された値を結果として返すことを強制します。 このメソッドは拡張機能をサポートするためのものであるため、それ以外の一般的な場合では呼び出してはいけません。
      定義:
      setRawResult、クラス: ForkJoinTask<V>
      パラメータ:
      value - 値
    • exec

      protected final boolean exec()
      RecursiveTaskのための実行規則を実装します。
      定義:
      exec、クラス: ForkJoinTask<V>
      戻り値:
      このタスクが正常に完了したことがわかっている場合はtrue