Class SettableFuture<V>
- All Implemented Interfaces:
AbstractFuture.Trusted<V>
,ListenableFuture<V>
,Future<V>
ListenableFuture
whose result can be set by a set(Object)
, setException(Throwable)
or setFuture(ListenableFuture)
call. It can also, like any
other Future
, be cancelled.
SettableFuture
is the recommended ListenableFuture
implementation when your
task cannot be implemented with ListeningExecutorService
, the various Futures
utility methods, or ListenableFutureTask
. Those APIs have less opportunity for developer
error. If your needs are more complex than SettableFuture
supports, use AbstractFuture
, which offers an extensible version of the API.
- Since:
- 9.0 (in 1.0 as
ValueFuture
)
-
Nested Class Summary
Nested classes/interfaces inherited from class com.google.common.util.concurrent.AbstractFuture
AbstractFuture.Trusted<V>, AbstractFuture.TrustedFuture<V>
Nested classes/interfaces inherited from interface java.util.concurrent.Future
Future.State
-
Field Summary
Fields inherited from class com.google.common.util.concurrent.AbstractFuture
GENERATE_CANCELLATION_CAUSES, log
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic <V> SettableFuture
<V> create()
Creates a newSettableFuture
that can be completed or cancelled by a later method call.boolean
Sets the result of thisFuture
unless thisFuture
has already been cancelled or set (including set asynchronously).boolean
setException
(Throwable throwable) Sets the failed result of thisFuture
unless thisFuture
has already been cancelled or set (including set asynchronously).boolean
setFuture
(ListenableFuture<? extends V> future) Sets the result of thisFuture
to match the supplied inputFuture
once the suppliedFuture
is done, unless thisFuture
has already been cancelled or set (including "set asynchronously," defined below).Methods inherited from class com.google.common.util.concurrent.AbstractFuture.TrustedFuture
addListener, cancel, get, get, isCancelled, isDone
Methods inherited from class com.google.common.util.concurrent.AbstractFuture
afterDone, interruptTask, maybePropagateCancellationTo, pendingToString, toString, tryInternalFastPathGetFailure, wasInterrupted
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface java.util.concurrent.Future
exceptionNow, resultNow, state
-
Constructor Details
-
SettableFuture
private SettableFuture()
-
-
Method Details
-
create
Creates a newSettableFuture
that can be completed or cancelled by a later method call. -
set
Description copied from class:AbstractFuture
Sets the result of thisFuture
unless thisFuture
has already been cancelled or set (including set asynchronously). When a call to this method returns, theFuture
is guaranteed to be done only if the call was accepted (in which case it returnstrue
). If it returnsfalse
, theFuture
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 aset*
method, only by a call toAbstractFuture.cancel(boolean)
.Beware of completing a future while holding a lock. Its listeners may do slow work or acquire other locks, risking deadlocks.
- Overrides:
set
in classAbstractFuture<V>
- Parameters:
value
- the value to be used as the result- Returns:
- true if the attempt was accepted, completing the
Future
-
setException
Description copied from class:AbstractFuture
Sets the failed result of thisFuture
unless thisFuture
has already been cancelled or set (including set asynchronously). When a call to this method returns, theFuture
is guaranteed to be done only if the call was accepted (in which case it returnstrue
). If it returnsfalse
, theFuture
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 aset*
method, only by a call toAbstractFuture.cancel(boolean)
.Beware of completing a future while holding a lock. Its listeners may do slow work or acquire other locks, risking deadlocks.
- Overrides:
setException
in classAbstractFuture<V>
- Parameters:
throwable
- the exception to be used as the failed result- Returns:
- true if the attempt was accepted, completing the
Future
-
setFuture
Description copied from class:AbstractFuture
Sets the result of thisFuture
to match the supplied inputFuture
once the suppliedFuture
is done, unless thisFuture
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 toAbstractFuture.cancel(boolean)
.If the call
setFuture(delegate)
is accepted and thisFuture
is later cancelled, cancellation will be propagated todelegate
. Additionally, any call tosetFuture
after any cancellation will propagate cancellation to the suppliedFuture
.Note that, even if the supplied future is cancelled and it causes this future to complete, it will never trigger interruption behavior. In particular, it will not cause this future to invoke the
AbstractFuture.interruptTask()
method, and theAbstractFuture.wasInterrupted()
method will not returntrue
.Beware of completing a future while holding a lock. Its listeners may do slow work or acquire other locks, risking deadlocks.
- Overrides:
setFuture
in classAbstractFuture<V>
- Parameters:
future
- the future to delegate to- Returns:
- true if the attempt was accepted, indicating that the
Future
was not previously cancelled or set.
-