Module  java.base
软件包  java.util.concurrent

Class RecursiveTask<V>

  • All Implemented Interfaces:
    SerializableFuture<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(); } } 
    然而,除了计算斐波纳契函数的一种愚蠢的方法(有一个简单的快速线性算法,您将在实践中使用),这很可能表现不佳,因为最小的子任务太小而不能被分解。 相反,正如几乎所有fork / join应用程序的情况一样,您可以选择一些最小粒度大小(例如,在此为10),您始终依次解决而不是细分。
    从以下版本开始:
    1.7
    另请参见:
    Serialized Form
    • 构造方法详细信息

      • RecursiveTask

        public RecursiveTask​()
    • 方法详细信息

      • compute

        protected abstract V compute​()
        这个任务执行的主要计算。
        结果
        计算的结果
      • getRawResult

        public final V getRawResult​()
        描述从类别复制: ForkJoinTask
        返回对返回的结果ForkJoinTask.join() ,即使这个任务异常完成,或null如果不知道这个任务已经完成。 此方法旨在帮助调试,以及支持扩展。 在任何其他情况下都不鼓励使用它。
        Specified by:
        getRawResultForkJoinTask<V>
        结果
        结果,或 null如果没有完成
      • setRawResult

        protected final void setRawResult​(V value)
        描述从类别复制: ForkJoinTask
        强制给定的值作为结果返回。 这种方法被设计为支持扩展,一般不应该以其他方式调用。
        Specified by:
        setRawResultForkJoinTask<V>
        参数
        value - 值
      • exec

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