模块  java.base
软件包  java.util.concurrent

Class RecursiveTask<V>

  • 实现的所有接口
    SerializableFuture<V>

    public abstract class RecursiveTask<V>
    extends ForkJoinTask<V>
    递归结果ForkJoinTask

    对于一个经典的例子,这里有一个计算Fibonacci数的任务:

       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(); } } 
    然而,除了作为计算Fibonacci函数的愚蠢方法(有一个简单的快速线性算法,你在实践中使用),这可能表现不佳,因为最小的子任务太小而不值得拆分。 相反,就像几乎所有fork / join应用程序的情况一样,您需要选择一些最小粒度大小(例如此处为10),您始终按顺序求解而不是细分。
    从以下版本开始:
    1.7
    另请参见:
    Serialized Form
    • 构造方法详细信息

      • RecursiveTask

        public RecursiveTask()
    • 方法详细信息

      • compute

        protected abstract V compute()
        该任务执行的主要计算。
        结果
        计算的结果
      • exec

        protected final boolean exec()
        实现RecursiveTask的执行约定。
        Specified by:
        execForkJoinTask<V>
        结果
        true如果已知此任务已正常完成