Class AbstractFuture<V>
- All Implemented Interfaces:
Future<V>,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.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddListener(Runnable listener, Executor executor) protected voidCallback method that is called exactly once after the future is completed.booleancancel(boolean mayInterruptIfRunning) static ExecutorReturns anExecutorthat runs each task in the thread that invokesexecute, as inThreadPoolExecutor.CallerRunsPolicy.get()static <V> Vprotected voidSubclasses can override this method to implement interruption of the future's computation.booleanbooleanisDone()protected booleanSets the result of thisFutureunless thisFuturehas already been cancelled or set (including set asynchronously).protected booleansetException(Throwable throwable) Sets the failed result of thisFutureunless thisFuturehas already been cancelled or set (including set asynchronously).protected booleansetFuture(org.apache.hadoop.thirdparty.com.google.common.util.concurrent.ListenableFuture<? extends V> future) Sets the result of thisFutureto match the supplied inputFutureonce the suppliedFutureis done, unless thisFuturehas already been cancelled or set (including "set asynchronously," defined below).protected final booleanReturns true if this future was cancelled withmayInterruptIfRunningset totrue.
-
Constructor Details
-
AbstractFuture
protected AbstractFuture()Constructor for use by subclasses.
-
-
Method Details
-
get
public V get(long timeout, TimeUnit unit) throws InterruptedException, TimeoutException, ExecutionException The default
AbstractFutureimplementation throwsInterruptedExceptionif the current thread is interrupted before or during the call, even if the value is already available.- Specified by:
getin interfaceFuture<V>- Throws:
InterruptedException- if the current thread was interrupted before or during the call (optional but recommended).CancellationExceptionTimeoutExceptionExecutionException
-
get
The default
AbstractFutureimplementation throwsInterruptedExceptionif the current thread is interrupted before or during the call, even if the value is already available.- Specified by:
getin interfaceFuture<V>- Throws:
InterruptedException- if the current thread was interrupted before or during the call (optional but recommended).CancellationExceptionExecutionException
-
isDone
public boolean isDone() -
isCancelled
public boolean isCancelled()- Specified by:
isCancelledin interfaceFuture<V>
-
cancel
public boolean cancel(boolean mayInterruptIfRunning) If a cancellation attempt succeeds on a
Futurethat had previously been set asynchronously, then the cancellation will also be propagated to the delegateFuturethat was supplied in thesetFuturecall. -
interruptTask
protected void interruptTask()Subclasses can override this method to implement interruption of the future's computation. The method is invoked automatically by a successful call tocancel(true).The default implementation does nothing.
- Since:
- 10.0
-
wasInterrupted
protected final boolean wasInterrupted()Returns true if this future was cancelled withmayInterruptIfRunningset totrue.- Since:
- 14.0
-
addListener
- Specified by:
addListenerin interfaceorg.apache.hadoop.thirdparty.com.google.common.util.concurrent.ListenableFuture<V>- Since:
- 10.0
-
set
Sets the result of thisFutureunless thisFuturehas already been cancelled or set (including set asynchronously). When a call to this method returns, theFutureis guaranteed to be done only if the call was accepted (in which case it returnstrue). If it returnsfalse, theFuturemay 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 aset*method, only by a call tocancel(boolean).- Parameters:
value- the value to be used as the result- Returns:
- true if the attempt was accepted, completing the
Future
-
setException
Sets the failed result of thisFutureunless thisFuturehas already been cancelled or set (including set asynchronously). When a call to this method returns, theFutureis guaranteed to be done only if the call was accepted (in which case it returnstrue). If it returnsfalse, theFuturemay 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 aset*method, only by a call tocancel(boolean).- Parameters:
throwable- the exception to be used as the failed result- Returns:
- true if the attempt was accepted, completing the
Future
-
setFuture
@Beta protected boolean setFuture(org.apache.hadoop.thirdparty.com.google.common.util.concurrent.ListenableFuture<? extends V> future) Sets the result of thisFutureto match the supplied inputFutureonce the suppliedFutureis done, unless thisFuturehas 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 tocancel(boolean).If the call
setFuture(delegate)is accepted and thisFutureis later cancelled, cancellation will be propagated todelegate. Additionally, any call tosetFutureafter any cancellation will propagate cancellation to the suppliedFuture.- Parameters:
future- the future to delegate to- Returns:
- true if the attempt was accepted, indicating that the
Futurewas not previously cancelled or set. - Since:
- 19.0
-
getDone
- Throws:
ExecutionException
-
afterDone
@Beta protected void afterDone()Callback method that is called exactly once after the future is completed.If
interruptTask()is also run during completion,afterDone()runs after it.The default implementation of this method in
AbstractFuturedoes 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.- Since:
- 20.0
-
directExecutor
Returns anExecutorthat runs each task in the thread that invokesexecute, as inThreadPoolExecutor.CallerRunsPolicy.This instance is equivalent to:
final class DirectExecutor implements Executor { public void execute(Runnable r) { r.run(); } }
-