public abstract class ForkJoinTask<V> extends Object implements Future<V>, Serializable
ForkJoinPool
.
A ForkJoinTask
is a thread-like entity that is much
lighter weight than a normal thread. Huge numbers of tasks and
subtasks may be hosted by a small number of actual threads in a
ForkJoinPool, at the price of some usage limitations.
A "main" ForkJoinTask
begins execution when it is
explicitly submitted to a ForkJoinPool
, or, if not already
engaged in a ForkJoin computation, commenced in the ForkJoinPool.commonPool()
via fork()
, invoke()
, or
related methods. Once started, it will usually in turn start other
subtasks. As indicated by the name of this class, many programs
using ForkJoinTask
employ only methods fork()
and
join()
, or derivatives such as invokeAll
. However, this class also
provides a number of other methods that can come into play in
advanced usages, as well as extension mechanics that allow support
of new forms of fork/join processing.
A ForkJoinTask
is a lightweight form of Future
.
The efficiency of ForkJoinTask
s stems from a set of
restrictions (that are only partially statically enforceable)
reflecting their main use as computational tasks calculating pure
functions or operating on purely isolated objects. The primary
coordination mechanisms are fork()
, that arranges
asynchronous execution, and join()
, that doesn't proceed
until the task's result has been computed. Computations should
ideally avoid synchronized
methods or blocks, and should
minimize other blocking synchronization apart from joining other
tasks or using synchronizers such as Phasers that are advertised to
cooperate with fork/join scheduling. Subdividable tasks should also
not perform blocking I/O, and should ideally access variables that
are completely independent of those accessed by other running
tasks. These guidelines are loosely enforced by not permitting
checked exceptions such as IOExceptions
to be
thrown. However, computations may still encounter unchecked
exceptions, that are rethrown to callers attempting to join
them. These exceptions may additionally include