A cancellable asynchronous computation. This class provides a base
implementation of Future, with methods to start and cancel
a computation, query to see if the computation is complete, and
retrieve the result of the computation. The result can only be
retrieved when the computation has completed; the get
methods will block if the computation has not yet completed. Once
the computation has completed, the computation cannot be restarted
or cancelled (unless the computation is invoked using
runAndReset()).

A FutureTask can be used to wrap a Callable or
Runnable object. Because FutureTask implements
Runnable, a FutureTask can be submitted to an
Executor for execution.

In addition to serving as a standalone class, this class provides
protected functionality that may be useful when creating
customized task classes.

cancel

Attempts to cancel execution of this task. This attempt will
fail if the task has already completed, has already been cancelled,
or could not be cancelled for some other reason. If successful,
and this task has not started when cancel is called,
this task should never run. If the task has already started,
then the mayInterruptIfRunning parameter determines
whether the thread executing this task should be interrupted in
an attempt to stop the task.

After this method returns, subsequent calls to Future.isDone() will
always return true. Subsequent calls to Future.isCancelled()
will always return true if this method returned true.

done

protected void done()

Protected method invoked when this task transitions to state
isDone (whether normally or via cancellation). The
default implementation does nothing. Subclasses may override
this method to invoke completion callbacks or perform
bookkeeping. Note that you can query status inside the
implementation of this method to determine whether this task
has been cancelled.

runAndReset

protected boolean runAndReset()

Executes the computation without setting its result, and then
resets this future to initial state, failing to do so if the
computation encounters an exception or is cancelled. This is
designed for use with tasks that intrinsically execute more
than once.