java.util.concurrent.Future<V>, org.apache.hadoop.thirdparty.com.google.common.util.concurrent.ListenableFuture<V>@GwtCompatible(emulated=true)
public abstract class AbstractFuture<V>
extends java.lang.Object
implements org.apache.hadoop.thirdparty.com.google.common.util.concurrent.ListenableFuture<V>
ListenableFuture, intended for
advanced users only. More common ways to create a ListenableFuture
include instantiating a SettableFuture, submitting a task to a
ListeningExecutorService, and deriving a Future from an
existing one, typically using methods like (ListenableFuture, org.apache.hadoop.thirdparty.com.google.common.base.Function) Futures.transform
and its overloaded versions.
This class implements all methods in ListenableFuture.
Subclasses should provide a way to set the result of the computation
through the protected methods set(Object),
setFuture(ListenableFuture) and setException(Throwable).
Subclasses may also override interruptTask(), which will be
invoked automatically if a call to cancel(true)
succeeds in canceling the future. Subclasses should rarely override other
methods.
| Modifier | Constructor | Description |
|---|---|---|
protected |
AbstractFuture() |
Constructor for use by subclasses.
|
| Modifier and Type | Method | Description |
|---|---|---|
void |
addListener(java.lang.Runnable listener,
java.util.concurrent.Executor executor) |
|
protected void |
afterDone() |
Callback method that is called exactly once after the future is completed.
|
boolean |
cancel(boolean mayInterruptIfRunning) |
|
static java.util.concurrent.Executor |
directExecutor() |
Returns an
Executor that runs each task in the thread that invokes
execute, as in ThreadPoolExecutor.CallerRunsPolicy. |
V |
get() |
|
V |
get(long timeout,
java.util.concurrent.TimeUnit unit) |
|
static <V> V |
getDone(java.util.concurrent.Future<V> future) |
|
protected void |
interruptTask() |
Subclasses can override this method to implement interruption of the
future's computation.
|
boolean |
isCancelled() |
|
boolean |
isDone() |
|
protected boolean |
set(V value) |
Sets the result of this
Future unless this Future has
already been cancelled or set (including
set asynchronously). |
protected boolean |
setException(java.lang.Throwable throwable) |
Sets the failed result of this
Future unless this Future
has already been cancelled or set (including
set asynchronously). |
protected boolean |
setFuture(org.apache.hadoop.thirdparty.com.google.common.util.concurrent.ListenableFuture<? extends V> future) |
Sets the result of this
Future to match the supplied input
Future once the supplied Future is done, unless this
Future has already been cancelled or set (including "set
asynchronously," defined below). |
protected boolean |
wasInterrupted() |
Returns true if this future was cancelled with
mayInterruptIfRunning set to true. |
public V get(long timeout, java.util.concurrent.TimeUnit unit) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException, java.util.concurrent.ExecutionException
The default AbstractFuture implementation throws
InterruptedException if the current thread is interrupted before or
during the call, even if the value is already available.
get in interface java.util.concurrent.Future<V>java.lang.InterruptedException - if the current thread was interrupted
before or during the call
(optional but recommended).java.util.concurrent.CancellationExceptionjava.util.concurrent.TimeoutExceptionjava.util.concurrent.ExecutionExceptionpublic V get() throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
The default AbstractFuture implementation throws
InterruptedException if the current thread is interrupted before or
during the call, even if the value is already available.
get in interface java.util.concurrent.Future<V>java.lang.InterruptedException - if the current thread was interrupted
before or during the call
(optional but recommended).java.util.concurrent.CancellationExceptionjava.util.concurrent.ExecutionExceptionpublic boolean isDone()
isDone in interface java.util.concurrent.Future<V>public boolean isCancelled()
isCancelled in interface java.util.concurrent.Future<V>public boolean cancel(boolean mayInterruptIfRunning)
If a cancellation attempt succeeds on a Future that had
previously been set asynchronously, then the
cancellation will also be propagated to the delegate Future that
was supplied in the setFuture call.
cancel in interface java.util.concurrent.Future<V>protected void interruptTask()
cancel(true).
The default implementation does nothing.
protected final boolean wasInterrupted()
mayInterruptIfRunning set to true.public void addListener(java.lang.Runnable listener,
java.util.concurrent.Executor executor)
addListener in interface org.apache.hadoop.thirdparty.com.google.common.util.concurrent.ListenableFuture<V>protected boolean set(@Nullable
V value)
Future unless this Future has
already been cancelled or set (including
set asynchronously). When a call to this method
returns, the Future is guaranteed to be
done only if the call was accepted (in which
case it returns true). If it returns false, the
Future may have previously been set asynchronously, in which case its
result may not be known yet. That result, though not yet known, cannot
be overridden by a call to a set* method, only by a call to
cancel(boolean).value - the value to be used as the resultFutureprotected boolean setException(java.lang.Throwable throwable)
Future unless this Future
has already been cancelled or set (including
set asynchronously). When a call to this method
returns, the Future is guaranteed to be
done only if the call was accepted (in which
case it returns true). If it returns false, the
Future may have previously been set asynchronously, in which case
its result may not be known yet. That result, though not yet known,
cannot be overridden by a call to a set* method, only by a call
to cancel(boolean).throwable - the exception to be used as the failed resultFuture@Beta protected boolean setFuture(org.apache.hadoop.thirdparty.com.google.common.util.concurrent.ListenableFuture<? extends V> future)
Future to match the supplied input
Future once the supplied Future is done, unless this
Future has already been cancelled or set (including "set
asynchronously," defined below).
If the supplied future is done when this method
is called and the call is accepted, then this future is guaranteed to
have been completed with the supplied future by the time this method
returns. If the supplied future is not done and the call is accepted, then
the future will be set asynchronously. Note that such a result,
though not yet known, cannot be overridden by a call to a set*
method, only by a call to cancel(boolean).
If the call setFuture(delegate) is accepted and this
Future is later cancelled, cancellation will be propagated to
delegate. Additionally, any call to setFuture after any
cancellation will propagate cancellation to the supplied Future.
future - the future to delegate to
Future was not previously cancelled or set.public static <V> V getDone(java.util.concurrent.Future<V> future)
throws java.util.concurrent.ExecutionException
java.util.concurrent.ExecutionException@Beta protected void afterDone()
If interruptTask() is also run during completion,
afterDone() runs after it.
The default implementation of this method in AbstractFuture
does nothing. This is intended for very lightweight cleanup work, for
example, timing statistics or clearing fields.
If your task does anything heavier consider, just using a listener with
an executor.
public static java.util.concurrent.Executor directExecutor()
Executor that runs each task in the thread that invokes
execute, as in ThreadPoolExecutor.CallerRunsPolicy.
This instance is equivalent to:
final class DirectExecutor implements Executor {
public void execute(Runnable r) {
r.run();
}
}Copyright © 2008–2025 Apache Software Foundation. All rights reserved.