Most visited

Recently visited

Added in API level 21

ForkJoinTask

public abstract class ForkJoinTask
extends Object implements Future<V>, Serializable

java.lang.Object
   ↳ java.util.concurrent.ForkJoinTask<V>
Known Direct Subclasses


ForkJoinPool内运行的任务的抽象基类。 A ForkJoinTask是一个类似线程的实体,比普通线程轻得多。 大量的任务和子任务可能由一些使用限制的代价在ForkJoinPool中由少量实际线程托管。

A“主” ForkJoinTask开始执行时,明确提出到ForkJoinPool ,或者,如果不是已经从事ForkJoin计算,在开始commonPool()通过fork()invoke() ,或相关方法。 一旦开始,它通常会开始启动其他子任务。 如该类别的名称所示,许多使用ForkJoinTask程序ForkJoinTask使用方法fork()join()或诸如invokeAll衍生物。 然而,这个类还提供了许多其他方法,可以在高级用法中使用,以及允许支持新形式的fork / join处理的扩展机制。

A ForkJoinTask是一种轻量级的Future ForkJoinTask的效率源于一系列限制(仅部分是静态可执行的),反映它们主要用作计算纯函数或在纯孤立对象上运行的计算任务。 主要的协调机制是fork() ,它安排异步执行和join() ,直到任务的结果被计算出才会继续执行。 理想情况下,计算应避免synchronized方法或块,并且应尽量减少除加入其他任务或使用同步器(例如通告与fork / join调度协作的相位器)之外的其他阻塞同步。 可细分的任务也不应该执行阻塞I / O,理想情况下应该访问完全独立于其他正在运行的任务访问的变量。 由于不允许检查异常(如IOExceptions被抛出, IOExceptions这些准则被宽松地强制执行。 但是,计算仍可能会遇到未检查的异常,这些异常会重新尝试加入到调用者中。 这些异常还可能包括源于内部资源耗尽的RejectedExecutionException ,例如未能分配内部任务队列。 突发异常的行为与常规异常相同,但在可能的情况下,包含启动计算的线程以及实际遇到异常的线程的堆栈跟踪(例如,使用ex.printStackTrace()显示); 最低限度只有后者。

可以定义和使用可能阻塞的ForkJoinTasks,但这样做需要进一步考虑三个因素:(1)完成很少的任何其他任务应该依赖于阻塞外部同步或I / O的任务。 永远不会加入的事件式异步任务(例如,那些CountedCompleterCountedCompleter )通常属于此类别。 (2)为尽量减少资源的影响,任务应小; 理想情况下只执行(可能)阻止操作。 (3)除非使用ForkJoinPool.ManagedBlocker API,否则可能阻塞的任务的数量已知小于池的getParallelism()级别, getParallelism()池不能保证有足够的线程可用来确保进度或良好的性能。

等待完成并提取任务结果的主要方法是join() ,但有几种变体: get()方法支持可中断和/或定时等待完成并使用Future约定报告结果。 方法invoke()在语义上等同于fork(); join()但始终尝试在当前线程中开始执行。 这些方法的“ 安静 ”形式不会提取结果或报告异常。 当一组任务正在执行时,这些可能很有用,并且需要延迟处理结果或异常,直到全部完成。 方法invokeAll (可用于多个版本)执行最常见的并行调用形式:分派一组任务并将它们全部加入。

在最典型的用法中,fork-join对像一个调用(fork),并且从并行递归函数返回(join)。 与其他形式的递归调用一样,返回(连接)应该以内部优先执行。 例如, a.fork(); b.fork(); b.join(); a.join();很可能是显着大于接合更有效a之前b

任务的执行状态可以在几个细节级别上查询: isDone()如果以任何方式完成任务(包括任务被取消而未执行的情况),则为真; isCompletedNormally()如果任务完成而没有取消或遇到异常,则为true; isCancelled()如果任务被取消(在这种情况下, getException()返回CancellationExceptionCancellationException ; isCompletedAbnormally()如果任务被取消或遇到异常,则为真,在这种情况下, getException()将返回遇到的异常或CancellationException

ForkJoinTask类通常不直接进行子类化。 相反,你继承了支持叉的特定风格/连接处理,通常是抽象类的一个RecursiveAction对于不返回结果大多数计算, RecursiveTask对于那些做的, CountedCompleter对于那些在已完成的操作触发其它动作。 通常情况下,一个具体的子类ForkJoinTask声明字段,其包括它的参数,建立在一个构造,然后限定了compute以某种方式使用由这个基类提供的控制方法的方法。

方法join()及其变体仅适用于完成依赖关系是非循环的; 也就是说,并行计算可以描述为有向无环图(DAG)。 否则,执行可能会遇到一种形式的死锁,因为任务会周期性地等待对方。 然而,该框架支持的其它方法和技术(例如使用PhaserhelpQuiesce()complete(V) ),其可以使用在构建定制子类为没有静态构造为DAG的问题。 为了支持这种用法,可以使用setForkJoinTaskTag(short)compareAndSetForkJoinTaskTag(short, short)用ForkJoinTask以short值原子标记 ,并使用getForkJoinTaskTag()进行检查。 该ForkJoinTask实现不使用这些protected方法或标签用于任何目的,但它们可能是在专门的子类建设使用。 例如,并行图遍历可以使用提供的方法来避免重新访问已经处理的节点/任务。 (用于标记的方法名称部分庞大,以鼓励定义反映其使用模式的方法。)

大多数基本支持方法是final ,用于防止覆盖与内在轻量级任务调度框架内在final的实现。 开发者创建新的基本样式叉/加入处理应最低限度地实现protected方法exec()setRawResult(V) ,和getRawResult() ,同时还引入,可以在其子类来实现的抽象计算方法,可能依赖于其他protected由此类提供的方法。

ForkJoinTasks应该执行相对少量的计算。 大任务应该分解成更小的子任务,通常通过递归分解。 作为一个非常粗略的经验法则,一项任务应该执行超过100个和少于10000个基本计算步骤,并且应该避免无限循环。 如果任务太大,那么并行性不能提高吞吐量。 如果太小,则内存和内部任务维护开销可能压倒处理。

该课程为RunnableCallable提供adapt方法,当将ForkJoinTasks执行与其他类型的任务混合时可能会使用该方法。 当所有任务都是这种形式时,请考虑使用在asyncMode中构造的池。

ForkJoinTasks是Serializable ,它使它们可以用于扩展,如远程执行框架。 仅在执行之前或之后序列化任务是明智的,但不是在执行期间。 在执行期间不依赖序列化。

Summary

Public constructors

ForkJoinTask()

Public methods

static <T> ForkJoinTask<T> adapt(Runnable runnable, T result)

返回一个新的 ForkJoinTask ,该 run执行给定 Runnablerun方法作为其操作,并将给定结果返回到 join()

static ForkJoinTask<?> adapt(Runnable runnable)

返回一个新的 ForkJoinTask ,它执行给定 Runnablerun方法作为其操作,并在 join()返回空结果。

static <T> ForkJoinTask<T> adapt(Callable<? extends T> callable)

返回一个新的 ForkJoinTask ,该 call执行给定 Callablecall方法作为其操作,并将结果返回到 join() ,将所遇到的任何检查到的异常转换为 RuntimeException

boolean cancel(boolean mayInterruptIfRunning)

试图取消执行此任务。

final boolean compareAndSetForkJoinTaskTag(short expect, short update)

原子上有条件地设置此任务的标记值。

void complete(V value)

完成此任务,如果尚未中止或取消,则返回给定值,作为后续调用 join和相关操作的结果。

void completeExceptionally(Throwable ex)

异常完成此任务,如果尚未中止或取消,则导致它在 join和相关操作中抛出给定异常。

final ForkJoinTask<V> fork()

安排在池异步执行这一任务,当前任务运行在(如果适用),或使用 commonPool()如果不是 inForkJoinPool()

final V get(long timeout, TimeUnit unit)

如果需要,最多等待计算完成的给定时间,然后检索其结果(如果可用)。

final V get()

如果需要,等待计算完成,然后检索其结果。

final Throwable getException()

返回基本计算抛出的异常,或者 CancellationException如果取消,或者 null如果没有或者方法尚未完成。

final short getForkJoinTaskTag()

返回此任务的标签。

static ForkJoinPool getPool()

返回宿主当前线程的池,如果当前线程在任何ForkJoinPool之外执行,则返回 null

static int getQueuedTaskCount()

返回当前工作线程已分叉但尚未执行的任务数的估计值。

abstract V getRawResult()

返回 join()返回的结果,即使该任务异常完成,或 null如果此任务未知完成。

static int getSurplusQueuedTaskCount()

返回当前工作线程持有多少本地排队任务的估计值,而不是其他可能窃取它们的工作线程的值,如果此线程未在ForkJoinPool中运行,则返回零。

static void helpQuiesce()

可能会执行任务,直到承载当前任务的池 is quiescent

static boolean inForkJoinPool()

返回 true如果当前线程是 ForkJoinWorkerThread执行作为ForkJoinPool计算。

final V invoke()

开始执行此任务,如果需要等待其完成,并返回其结果,或者如果基础计算执行此操作,则抛出(未选中) RuntimeExceptionError

static void invokeAll(ForkJoinTask...<?> tasks)

isDone给定的任务,当 isDone为每个任务保留或遇到(未检查)的异常时返回,在这种情况下,异常被重新抛出。

static void invokeAll(ForkJoinTask<?> t1, ForkJoinTask<?> t2)

isDone给定的任务,当每个任务保持 isDone或遇到(未检查)的异常时返回,在这种情况下,异常将被重新抛出。

static <T extends ForkJoinTask<?>> Collection<T> invokeAll(Collection<T> tasks)

isDone指定集合中的所有任务,当每个任务保持 isDone或遇到(未检查)异常时返回,在这种情况下,将重新抛出异常。

final boolean isCancelled()

如果此任务在正常完成之前取消,则返回 true

final boolean isCompletedAbnormally()

如果此任务引发异常或被取消,则返回 true

final boolean isCompletedNormally()

如果此任务完成而没有抛出异常并且未取消,则返回 true

final boolean isDone()

如果此任务完成,则返回 true

final V join()

返回 is done时的计算结果。

final void quietlyComplete()

通常无需设置值即可完成此任务。

final void quietlyInvoke()

开始执行此任务并在必要时等待完成,而不返回结果或抛出异常。

final void quietlyJoin()

加入此任务,但不返回结果或抛出异常。

void reinitialize()

重置此任务的内部簿记状态,允许随后 fork

final short setForkJoinTaskTag(short newValue)

以原子方式设置此任务的标记值并返回旧值。

boolean tryUnfork()

试图排除这个任务的执行。

Protected methods

abstract boolean exec()

立即执行此任务的基本操作,并返回true,如果从此方法返回后,此任务保证已正常完成。

static ForkJoinTask<?> peekNextLocalTask()

返回但不排除或执行由当前线程排队但尚未执行的任务(如果立即可用)。

static ForkJoinTask<?> pollNextLocalTask()

如果当前线程正在ForkJoinPool中运行,那么取消调度并返回(不执行)下一个由当前线程排队但尚未执行的任务。

static ForkJoinTask<?> pollTask()

如果当前线程正在ForkJoinPool中运行,则取消调度并返回(不执行)由当前线程排队但尚未执行的下一个任务(如果有)或者不可用时由其他线程分叉的任务,如果可供使用的话。

abstract void setRawResult(V value)

因此强制返回给定的值。

Inherited methods

From class java.lang.Object
From interface java.util.concurrent.Future

Public constructors

ForkJoinTask

Added in API level 21
ForkJoinTask ()

Public methods

adapt

Added in API level 21
ForkJoinTask<T> adapt (Runnable runnable, 
                T result)

返回一个新的 ForkJoinTask ,该 run执行给定 Runnablerun方法作为其操作,并将给定结果返回到 join()

Parameters
runnable Runnable: the runnable action
result T: the result upon completion
Returns
ForkJoinTask<T> the task

adapt

Added in API level 21
ForkJoinTask<?> adapt (Runnable runnable)

返回一个新的 ForkJoinTask ,它执行给定 Runnablerun方法作为其操作,并在 join()返回空结果。

Parameters
runnable Runnable: the runnable action
Returns
ForkJoinTask<?> the task

adapt

Added in API level 21
ForkJoinTask<T> adapt (Callable<? extends T> callable)

返回一个新的 ForkJoinTask ,该 call执行给定 Callablecall方法作为其操作,并在 join()返回结果,将遇到的任何检查的异常转换为 RuntimeException

Parameters
callable Callable: the callable action
Returns
ForkJoinTask<T> the task

cancel

Added in API level 21
boolean cancel (boolean mayInterruptIfRunning)

试图取消执行此任务。 如果任务已完成或由于其他原因无法取消,则此尝试将失败。 如果成功,并且调用cancel时此任务尚未开始,则此任务的执行将被取消。 经过此方法成功返回,除非有介入呼叫reinitialize() ,后续调用isCancelled()isDone() ,并cancel将返回true ,并呼吁join() ,并会导致相关方法CancellationException

这个方法可以在子类中被覆盖,但如果是这样的话,仍然必须确保这些属性保持不变。 特别是, cancel方法本身不能抛出异常。

此方法旨在由其他任务调用。 要终止当前任务,只需从计算方法中返回或抛出一个未检查的异常,或者调用completeExceptionally(Throwable)

Parameters
mayInterruptIfRunning boolean: this value has no effect in the default implementation because interrupts are not used to control cancellation.
Returns
boolean true if this task is now cancelled

compareAndSetForkJoinTaskTag

Added in API level 24
boolean compareAndSetForkJoinTaskTag (short expect, 
                short update)

原子上有条件地设置此任务的标记值。 在其他应用程序中,标记可用作图形操作任务中的访问标记,如在处理之前检查: if (task.compareAndSetForkJoinTaskTag((short)0, (short)1))方法,否则由于节点已被访问而退出。

Parameters
expect short: the expected tag value
update short: the new tag value
Returns
boolean true if successful; i.e., the current value was equal to expect and was changed to update.

complete

Added in API level 21
void complete (V value)

完成此任务,如果尚未中止或取消,则返回给定值,作为后续调用join和相关操作的结果。 此方法可用于为异步任务提供结果,或为通常无法完成的任务提供备选处理。 不鼓励在其他情况下使用它。 此方法是可覆盖的,但重写的版本必须调用super实现来维护保证。

Parameters
value V: the result value for this task

completeExceptionally

Added in API level 21
void completeExceptionally (Throwable ex)

异常完成此任务,如果尚未中止或取消,则导致它在join和相关操作中抛出给定异常。 此方法可用于诱发异步任务中的异常,或强制完成不会完成的任务。 不鼓励在其他情况下使用它。 此方法是可覆盖的,但被覆盖的版本必须调用super实现来维护保证。

Parameters
ex Throwable: the exception to throw. If this exception is not a RuntimeException or Error, the actual exception thrown will be a RuntimeException with cause ex.

fork

Added in API level 21
ForkJoinTask<V> fork ()

安排在池异步执行这一任务,当前任务运行在(如果适用),或使用commonPool()如果不是inForkJoinPool() 虽然它不一定是强制执行的,但除非已完成并重新初始化,否则多次分叉任务是一种使用错误。 对任务状态或其操作的任何数据的后续修改不一定可以由除执行它之外的任何线程始终观察到,除非在调用join()或相关方法之前,或者调用isDone()返回true

Returns
ForkJoinTask<V> this, to simplify usage

get

Added in API level 21
V get (long timeout, 
                TimeUnit unit)

如果需要,最多等待计算完成的给定时间,然后检索其结果(如果可用)。

Parameters
timeout long: the maximum time to wait
unit TimeUnit: the time unit of the timeout argument
Returns
V the computed result
Throws
CancellationException if the computation was cancelled
ExecutionException if the computation threw an exception
InterruptedException if the current thread is not a member of a ForkJoinPool and was interrupted while waiting
TimeoutException if the wait timed out

get

Added in API level 21
V get ()

如果需要,等待计算完成,然后检索其结果。

Returns
V the computed result
Throws
CancellationException if the computation was cancelled
ExecutionException if the computation threw an exception
InterruptedException if the current thread is not a member of a ForkJoinPool and was interrupted while waiting

getException

Added in API level 21
Throwable getException ()

返回由基本计算抛出的异常,或者 CancellationException如果取消),或者 null如果没有)或方法尚未完成。

Returns
Throwable the exception, or null if none

getForkJoinTaskTag

Added in API level 24
short getForkJoinTaskTag ()

返回此任务的标签。

Returns
short the tag for this task

getPool

Added in API level 21
ForkJoinPool getPool ()

如果当前线程在任何ForkJoinPool外部执行,则返回承载当前线程的池或 null

该方法返回 null当且仅当 inForkJoinPool()回报 false

Returns
ForkJoinPool the pool, or null if none

getQueuedTaskCount

Added in API level 21
int getQueuedTaskCount ()

返回当前工作线程已分叉但尚未执行的任务数的估计值。 这个值对于是否要分叉其他任务的启发式决策可能很有用。

Returns
int the number of tasks

getRawResult

Added in API level 21
V getRawResult ()

返回join()返回的结果,即使此任务异常完成,或者null如果此任务未知完成)。 此方法旨在帮助调试以及支持扩展。 不鼓励在任何其他情况下使用它。

Returns
V the result, or null if not completed

getSurplusQueuedTaskCount

Added in API level 21
int getSurplusQueuedTaskCount ()

返回当前工作线程持有多少本地排队任务的估计值,而不是其他可能窃取它们的工作线程的值,如果此线程未在ForkJoinPool中运行,则返回零。 这个值对于是否要分叉其他任务的启发式决策可能很有用。 在ForkJoinTasks的许多用法中,在稳定状态下,每个工作人员应该致力于保持一个小的恒定剩余(例如3个)任务,并在超出此阈值时在本地处理计算。

Returns
int the surplus number of tasks, which may be negative

helpQuiesce

Added in API level 21
void helpQuiesce ()

可能会执行任务,直到承载当前任务的池is quiescent 这种方法可能用于许多任务分叉的设计中,但没有一个是明确加入的,而是执行它们直到处理完所有任务。

inForkJoinPool

Added in API level 21
boolean inForkJoinPool ()

返回 true如果当前线程是 ForkJoinWorkerThread执行作为ForkJoinPool计算。

Returns
boolean true if the current thread is a ForkJoinWorkerThread executing as a ForkJoinPool computation, or false otherwise

invoke

Added in API level 21
V invoke ()

开始执行此任务,如果需要等待完成,并返回其结果,或者如果底层计算执行此操作,则抛出(未选中) RuntimeExceptionError

Returns
V the computed result

invokeAll

Added in API level 21
void invokeAll (ForkJoinTask...<?> tasks)

isDone给定的任务,当isDone对每个任务保持isDone或遇到(未检查)的异常时返回,在这种情况下重新排除异常。 如果多个任务遇到异常,则此方法将引发这些异常中的任何一个。 如果任何任务遇到异常,其他人可能会被取消。 但是,个别任务的执行状态在异常返回时无法得到保证。 每个任务的状态可以使用getException()和相关方法来获得,以检查它们是否已被取消,正常或异常完成,还是未处理。

Parameters
tasks ForkJoinTask: the tasks
Throws
NullPointerException if any task is null

invokeAll

Added in API level 21
void invokeAll (ForkJoinTask<?> t1, 
                ForkJoinTask<?> t2)

isDone给定的任务,当isDone保持每个任务或遇到(未检查)的异常时返回,在这种情况下,异常被重新抛出。 如果多个任务遇到异常,则此方法将引发这些异常中的任何一个。 如果任何任务遇到异常,则可能会取消另一个任务。 但是,个别任务的执行状态在异常返回时无法得到保证。 每个任务的状态可以使用getException()和相关方法来获得,以检查它们是否已被取消,正常或异常完成,还是未处理。

Parameters
t1 ForkJoinTask: the first task
t2 ForkJoinTask: the second task
Throws
NullPointerException if any task is null

invokeAll

Added in API level 21
Collection<T> invokeAll (Collection<T> tasks)

isDone指定集合中的所有任务,当每个任务保持isDone或遇到(未检查)异常时返回,在这种情况下,将重新抛出异常。 如果多个任务遇到异常,则此方法将引发这些异常中的任何一个。 如果任何任务遇到异常,其他人可能会被取消。 但是,个别任务的执行状态在异常返回时无法得到保证。 每个任务的状态可以使用getException()和相关方法来获得,以检查它们是否被取消,正常或异常完成,还是未处理。

Parameters
tasks Collection: the collection of tasks
Returns
Collection<T> the tasks argument, to simplify usage
Throws
NullPointerException if tasks or any element are null

isCancelled

Added in API level 21
boolean isCancelled ()

如果此任务在正常完成之前取消,则返回 true

Returns
boolean true if this task was cancelled before it completed

isCompletedAbnormally

Added in API level 21
boolean isCompletedAbnormally ()

如果此任务引发异常或被取消,则返回 true

Returns
boolean true if this task threw an exception or was cancelled

isCompletedNormally

Added in API level 21
boolean isCompletedNormally ()

如果此任务完成而没有抛出异常并且未取消,则返回 true

Returns
boolean true if this task completed without throwing an exception and was not cancelled

isDone

Added in API level 21
boolean isDone ()

如果此任务完成,则返回true 完成可能是由于正常终止,例外或取消 - 在所有这些情况下,此方法将返回true

Returns
boolean true if this task completed

join

Added in API level 21
V join ()

返回is done时的计算结果。 此方法不同于get()的异常完成结果为RuntimeExceptionError而不是ExecutionException ,并且调用线程的中断不会导致方法通过抛出InterruptedException突然返回。

Returns
V the computed result

quietlyComplete

Added in API level 24
void quietlyComplete ()

通常无需设置值即可完成此任务。 setRawResult(V) (或默认为null )确定的最新值将作为后续调用join和相关操作的结果返回。

quietlyInvoke

Added in API level 21
void quietlyInvoke ()

开始执行此任务并在必要时等待完成,而不返回结果或抛出异常。

quietlyJoin

Added in API level 21
void quietlyJoin ()

加入此任务,但不返回结果或抛出异常。 在处理某些已被取消或已知中止的任务时,此方法可能很有用。

reinitialize

Added in API level 21
void reinitialize ()

重置此任务的内部簿记状态,允许随后的fork 此方法允许重复使用此任务,但只有当此任务从未分叉,或分叉,然后完成并且此任务的所有未完成连接也已完成时才发生重用。 无法保证其他任何使用条件下的效果。 在循环中执行子任务的预构建树时,此方法可能很有用。

完成此方法后, isDone()报告falsegetException()报告null 但是, getRawResult返回的值不受影响。 要清除此值,可以调用setRawResult(null)

setForkJoinTaskTag

Added in API level 24
short setForkJoinTaskTag (short newValue)

以原子方式设置此任务的标记值并返回旧值。

Parameters
newValue short: the new tag value
Returns
short the previous value of the tag

tryUnfork

Added in API level 21
boolean tryUnfork ()

试图排除这个任务的执行。 如果此任务是当前线程的最近派生任务,并且尚未开始在另一个线程中执行,则此方法通常(但不能保证)成功。 这种方法在安排替代本地处理可能已经被盗但未被盗的任务时可能很有用。

Returns
boolean true if unforked

Protected methods

exec

Added in API level 21
boolean exec ()

立即执行此任务的基本操作,并返回true,如果从此方法返回后,此任务保证已正常完成。 否则,此方法可能会返回false,以指示此任务不一定完成(或未知完成),例如在需要显式调用完成方法的异步操作中。 此方法也可能会引发(未检查)异常以指示异常退出。 此方法旨在支持扩展,通常不应另行调用。

Returns
boolean true if this task is known to have completed normally

peekNextLocalTask

Added in API level 21
ForkJoinTask<?> peekNextLocalTask ()

返回但不排除或执行由当前线程排队但尚未执行的任务(如果立即可用)。 无法保证此任务将被实际轮询或接下来执行。 相反,即使存在任务,该方法也可以返回空值,但如果没有与其他线程竞争则无法访问该方法。 此方法主要是为了支持扩展而设计的,否则不太可能有用。

Returns
ForkJoinTask<?> the next task, or null if none are available

pollNextLocalTask

Added in API level 21
ForkJoinTask<?> pollNextLocalTask ()

如果当前线程正在ForkJoinPool中运行,那么取消调度并返回(不执行)下一个由当前线程排队但尚未执行的任务。 此方法主要是为了支持扩展而设计的,否则不太可能有用。

Returns
ForkJoinTask<?> the next task, or null if none are available

pollTask

Added in API level 21
ForkJoinTask<?> pollTask ()

如果当前线程正在ForkJoinPool中运行,则取消调度并返回(不执行)由当前线程排队但尚未执行的下一个任务(如果有)或者不可用时由其他线程分叉的任务,如果可供使用的话。 可用性可能是暂时的,因此null结果并不一定意味着此任务运行的池的静止。此方法主要是为了支持扩展而设计的,否则不太有用。

Returns
ForkJoinTask<?> a task, or null if none are available

setRawResult

Added in API level 21
void setRawResult (V value)

因此强制返回给定的值。 此方法旨在支持扩展,通常不应另行调用。

Parameters
value V: the value

Hooray!