モジュール java.base
パッケージ 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()
        このタスクによって実行される主な計算です。
        戻り値:
        計算の結果
      • exec

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