java.lang.Object
java.util.concurrent.ForkJoinTask<V>
java.util.concurrent.RecursiveTask<V>
- 类型参数:
-
V
- 任务结果的类型
- 所有实现的接口:
-
Serializable
,Future<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
- 参见:
-
Nested Class Summary
Nested classes/interfaces declared in interface java.util.concurrent.Future
Future.State
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected abstract V
compute()
该任务执行的主要计算。protected final boolean
exec()
为RecursiveTask实现执行约定。final V
返回由ForkJoinTask.join()
返回的结果,即使此任务异常完成,或者如果不知道此任务是否已完成,则返回null
。protected final void
setRawResult
(V value) 强制返回给定值作为结果。Methods declared in class java.util.concurrent.ForkJoinTask
adapt, adapt, adapt, adaptInterruptible, cancel, compareAndSetForkJoinTaskTag, complete, completeExceptionally, fork, get, get, getException, getForkJoinTaskTag, getPool, getQueuedTaskCount, getSurplusQueuedTaskCount, helpQuiesce, inForkJoinPool, invoke, invokeAll, invokeAll, invokeAll, isCancelled, isCompletedAbnormally, isCompletedNormally, isDone, join, peekNextLocalTask, pollNextLocalTask, pollSubmission, pollTask, quietlyComplete, quietlyInvoke, quietlyJoin, quietlyJoin, quietlyJoinUninterruptibly, reinitialize, setForkJoinTaskTag, tryUnfork
Methods declared in class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods declared in interface java.util.concurrent.Future
exceptionNow, resultNow, state
-
Constructor Details
-
RecursiveTask
public RecursiveTask()子类调用的构造函数。
-
-
Method Details
-
compute
该任务执行的主要计算。- 返回:
- 计算的结果
-
getRawResult
从类中复制的描述:ForkJoinTask
返回由ForkJoinTask.join()
返回的结果,即使此任务异常完成,或者如果不知道此任务是否已完成,则返回null
。此方法旨在帮助调试,以及支持扩展。不鼓励在任何其他情况下使用。- 指定者:
-
getRawResult
在类ForkJoinTask<V>
- 返回:
-
结果,如果未完成则返回
null
-
setRawResult
从类中复制的描述:ForkJoinTask
强制返回给定值作为结果。此方法旨在支持扩展,一般情况下不应调用。- 指定者:
-
setRawResult
在类ForkJoinTask<V>
- 参数:
-
value
- 值
-
exec
protected final boolean exec()为RecursiveTask实现执行约定。- 指定者:
-
exec
在类ForkJoinTask<V>
- 返回:
-
如果此任务已知正常完成,则返回
true
-