get method
Future represents the result of an asynchronous
computation. Methods are provided to check if the computation is
complete, to wait for its completion, and to retrieve the result of
the computation. The result can only be retrieved using method
get when the computation has completed, blocking if
necessary until it is ready. Cancellation is performed by the
cancel method. Additional methods are provided to
determine if the task completed normally or was cancelled. Once a
computation has completed, the computation cannot be cancelled.
If you would like to use a Future for the sake
of cancellability but not provide a usable result, you can
declare types of the form Future<?> and
return null as a result of the underlying task.
Cancellation of a Future need not abruptly terminate its
computation. Method cancel causes isCancelled() to
return true unless already isDone(); in either case
isDone() subsequently reports true. This suppresses
execution by an ExecutorService if not already started.
There are several options for suppressing unnecessary computation
or unblocking a running Future that will not generate a
result. When task bodies are simple and short, no special attention
is warranted. Computational methods in Future-aware code bodies
(for example ForkJoinTask, FutureTask) may inspect
their own isDone() status before or while engaging in
expensive computations. In blocking I/O or communication contexts,
the optional mayInterruptIfRunning argument of cancel may be used to support conventions that tasks should
unblock and exit when Thread#interrupted, whether checked
inside a task body or as a response to an InterruptedException. It is still preferable to additionally
check isDone() status when possible to avoid unintended
effects of other uses of Thread#interrupt.
Sample Usage (Note that the following classes are all made-up.)
interface ArchiveSearcher { String search(String target); }
class App {
ExecutorService executor = ...;
ArchiveSearcher searcher = ...;
void showSearch(String target) throws InterruptedException {
Callable<String> task = () -> searcher.search(target);
Future<String> future = executor.submit(task);
displayOtherThings(); // do other things while searching
try {
displayText(future.get()); // use future
} catch (ExecutionException ex) { cleanup(); return; }
}
}
The FutureTask class is an implementation of Future that
implements Runnable, and so may be executed by an Executor.
For example, the above construction with submit could be replaced by:
FutureTask<String> future = new FutureTask<>(task);
executor.execute(future);
Memory consistency effects: Actions taken by the asynchronous computation
happen-before
actions following the corresponding Future.get() in another thread.
FutureTask, Executor
| Modifier and Type | Class and Description |
|---|---|
| public static enum | Future.
Represents the computation state. |
| Modifier and Type | Method and Description |
|---|---|
| public boolean | Returns: false if the task could not be cancelled,
typically because it has already completed; true
otherwise. If two or more threads cause a task to be cancelled,
then at least one of them returns true. Implementations
may provide stronger guarantees.true if the thread
executing this task should be interrupted (if the thread is
known to the implementation); otherwise, in-progress tasks are
allowed to completeAttempts to cancel execution of this task. |
| public default Throwable | Returns: the exception thrown by the taskReturns the exception thrown by the task, without waiting. |
| public V | Returns: the computed resultWaits if necessary for the computation to complete, and then retrieves its result. |
| public V | |
| public boolean | Returns: true if this task was cancelled before it completedReturns |
| public boolean | |
| public default V | |
| public default Future. |
| cancel | back to summary |
|---|---|
| public boolean cancel(boolean mayInterruptIfRunning) Attempts to cancel execution of this task. This method has no
effect if the task is already completed or cancelled, or could
not be cancelled for some other reason. Otherwise, if this
task has not started when The return value from this method does not necessarily
indicate whether the task is now cancelled; use
| |
| exceptionNow | back to summary |
|---|---|
| public default Throwable exceptionNow() Returns the exception thrown by the task, without waiting. This method is for cases where the caller knows that the task has already completed with an exception. Implementation Specification The default implementation invokes
| |
| get | back to summary |
|---|---|
| public V get() throws InterruptedException, ExecutionException Waits if necessary for the computation to complete, and then retrieves its result.
| |
| get | back to summary |
|---|---|
| public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException Waits if necessary for at most the given time for the computation to complete, and then retrieves its result, if available.
| |
| isCancelled | back to summary |
|---|---|
| public boolean isCancelled() Returns
| |
| isDone | back to summary |
|---|---|
| public boolean isDone() Returns
| |
| resultNow | back to summary |
|---|---|
| public default V resultNow() Returns the computed result, without waiting. This method is for cases where the caller knows that the task has already completed successfully, for example when filtering a stream of Future objects for the successful tasks and using a mapping operation to obtain a stream of results. results = futures.stream() .filter(f -> f.state() == Future.State.SUCCESS) .map(Future::resultNow) .toList(); Implementation Specification The default implementation invokes
| |
| state | back to summary |
|---|---|
| public default Future. Returns the computation state. Implementation Specification The default implementation uses | |
| Modifier and Type | Field and Description |
|---|---|
| public static final Future. | CANCELLED
The task was cancelled. |
| public static final Future. | FAILED
The task completed with an exception. |
| public static final Future. | RUNNING
The task has not completed. |
| public static final Future. | SUCCESS
The task completed with a result. |
| Access | Constructor and Description |
|---|---|
| private |
| Modifier and Type | Method and Description |
|---|---|
| public static Future. | |
| public static Future. |
| CANCELLED | back to summary |
|---|---|
| public static final Future. The task was cancelled.
| |
| FAILED | back to summary |
|---|---|
| public static final Future. The task completed with an exception.
| |
| RUNNING | back to summary |
|---|---|
| public static final Future. The task has not completed. | |
| SUCCESS | back to summary |
|---|---|
| public static final Future. The task completed with a result.
| |
| State | back to summary |
|---|---|
| private State() | |
| valueOf | back to summary |
|---|---|
| public static Future. | |
| values | back to summary |
|---|---|
| public static Future. | |