Module java.base

Class RecursiveTask<V>

java.lang.Object
java.util.concurrent.ForkJoinTask<V>
java.util.concurrent.RecursiveTask<V>
类型参数:
V - 任务结果的类型
所有实现的接口:
Serializable, Future<V>

public abstract class RecursiveTask<V> extends ForkJoinTask<V>
一个递归的、带有结果的ForkJoinTask

例如,这里是一个用于计算阶乘的基于任务的程序:

 
 import java.util.concurrent.RecursiveTask;
 import java.math.BigInteger;
 public class Factorial {
   static class FactorialTask extends RecursiveTask<BigInteger> {
     private final int from, to;
     FactorialTask(int from, int to) { this.from = from; this.to = to; }
     protected BigInteger compute() {
       int range = to - from;
       if (range == 0) {                       // 基本情况
         return BigInteger.valueOf(from);
       } else if (range == 1) {                // 太小无法并行化
         return BigInteger.valueOf(from).multiply(BigInteger.valueOf(to));
       } else {                                // 分成两半
         int mid = from + range / 2;
         FactorialTask leftTask = new FactorialTask(from, mid);
         leftTask.fork();         // 在本地执行大约一半的工作
         return new FactorialTask(mid + 1, to).compute()
                .multiply(leftTask.join());
       }
     }
   }
   static BigInteger factorial(int n) { // 使用ForkJoinPool.commonPool()
     return (n <= 1) ? BigInteger.ONE : new FactorialTask(1, n).invoke();
   }
   public static void main(String[] args) {
     System.out.println(factorial(Integer.parseInt(args[0])));
   }
 }
自 JDK 版本:
1.7
参见:
  • Constructor Details

    • RecursiveTask

      public RecursiveTask()
      子类调用的构造函数。
  • Method Details

    • 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