Class SuccessAsyncFuture<T>
- java.lang.Object
-
- com.linkedin.alpini.base.concurrency.impl.AbstractAsyncFuture<T>
-
- com.linkedin.alpini.base.concurrency.impl.SuccessAsyncFuture<T>
-
- All Implemented Interfaces:
AsyncFuture<T>
,AsyncPromise<T>
,java.util.concurrent.CompletionStage<T>
,java.util.concurrent.Future<T>
public final class SuccessAsyncFuture<T> extends AbstractAsyncFuture<T> implements AsyncPromise<T>
A simple implementation ofAsyncFuture
which behaves as if the Future has already completed successfully. note: The AsyncFuture classes would be replaced with the Promise classes available in Netty4.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface com.linkedin.alpini.base.concurrency.AsyncFuture
AsyncFuture.Status
-
-
Field Summary
-
Fields inherited from interface com.linkedin.alpini.base.concurrency.AsyncFuture
NULL_SUCCESS
-
-
Constructor Summary
Constructors Constructor Description SuccessAsyncFuture(T value)
Construct an AsyncFuture which is already in success state.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description AsyncPromise<T>
addListener(AsyncFutureListener<T> listener)
Adds the specified listener to this future.AsyncPromise<T>
addListener(AsyncPromise<T> listener)
Adds the specified future as a listener to this future.AsyncFuture<T>
await()
Waits for this future to be completed.boolean
await(long timeout, java.util.concurrent.TimeUnit unit)
Waits for this future to be completed within the specified time limit.AsyncFuture<T>
awaitUninterruptibly()
Waits for this future to be completed without interruption.boolean
awaitUninterruptibly(long timeout, java.util.concurrent.TimeUnit unit)
Waits for this future to be completed within the specified time limit without interruption.boolean
cancel(boolean mayInterruptIfRunning)
Attempts to cancel execution of this task.T
get()
Waits if necessary for the computation to complete, and then retrieves its result.T
get(long timeout, java.util.concurrent.TimeUnit unit)
Waits if necessary for at most the given time for the computation to complete, and then retrieves its result, if available.java.lang.Throwable
getCause()
Returns the cause of the failed I/O operation if the I/O operation has failed.T
getNow()
Non-blocking variant ofFuture.get()
boolean
isCancelled()
Returns true if this task was cancelled before it completed normally.boolean
isDone()
Returns true if this task completed.boolean
isSuccess()
Returnstrue
if and only if the I/O operation was completed successfully.boolean
setFailure(java.lang.Throwable cause)
Marks this future as a failure and notifies all listeners.boolean
setSuccess(T result)
Marks this future as a success and notifies all listeners.java.util.concurrent.CompletableFuture<T>
toCompletableFuture()
-
Methods inherited from class com.linkedin.alpini.base.concurrency.impl.AbstractAsyncFuture
acceptEither, acceptEitherAsync, acceptEitherAsync, applyToEither, applyToEitherAsync, applyToEitherAsync, exceptionally, handle, handleAsync, handleAsync, runAfterBoth, runAfterBothAsync, runAfterBothAsync, runAfterEither, runAfterEitherAsync, runAfterEitherAsync, thenAccept, thenAcceptAsync, thenAcceptAsync, thenAcceptBoth, thenAcceptBothAsync, thenAcceptBothAsync, thenApply, thenApplyAsync, thenApplyAsync, thenCombine, thenCombineAsync, thenCombineAsync, thenCompose, thenComposeAsync, thenComposeAsync, thenRun, thenRunAsync, thenRunAsync, whenComplete, whenCompleteAsync, whenCompleteAsync
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.linkedin.alpini.base.concurrency.AsyncPromise
setComplete
-
Methods inherited from interface java.util.concurrent.CompletionStage
acceptEither, acceptEitherAsync, acceptEitherAsync, applyToEither, applyToEitherAsync, applyToEitherAsync, exceptionally, handle, handleAsync, handleAsync, runAfterBoth, runAfterBothAsync, runAfterBothAsync, runAfterEither, runAfterEitherAsync, runAfterEitherAsync, thenAccept, thenAcceptAsync, thenAcceptAsync, thenAcceptBoth, thenAcceptBothAsync, thenAcceptBothAsync, thenApply, thenApplyAsync, thenApplyAsync, thenCombine, thenCombineAsync, thenCombineAsync, thenCompose, thenComposeAsync, thenComposeAsync, thenRun, thenRunAsync, thenRunAsync, whenComplete, whenCompleteAsync, whenCompleteAsync
-
-
-
-
Method Detail
-
isSuccess
public boolean isSuccess()
Returnstrue
if and only if the I/O operation was completed successfully.- Specified by:
isSuccess
in interfaceAsyncFuture<T>
-
getCause
public java.lang.Throwable getCause()
Returns the cause of the failed I/O operation if the I/O operation has failed.- Specified by:
getCause
in interfaceAsyncFuture<T>
- Returns:
- the cause of the failure.
null
if succeeded or this future is not completed yet.
-
setSuccess
public boolean setSuccess(T result)
Marks this future as a success and notifies all listeners.- Specified by:
setSuccess
in interfaceAsyncPromise<T>
- Returns:
true
if and only if successfully marked this future as a success. Otherwisefalse
because this future is already marked as either a success or a failure.
-
setFailure
public boolean setFailure(@Nonnull java.lang.Throwable cause)
Marks this future as a failure and notifies all listeners.- Specified by:
setFailure
in interfaceAsyncPromise<T>
- Returns:
true
if and only if successfully marked this future as a failure. Otherwisefalse
because this future is already marked as either a success or a failure.
-
addListener
@Nonnull public AsyncPromise<T> addListener(AsyncFutureListener<T> listener)
Adds the specified listener to this future. The specified listener is notified when this future is done. If this future is already completed, the specified listener is notified immediately.- Specified by:
addListener
in interfaceAsyncFuture<T>
- Specified by:
addListener
in interfaceAsyncPromise<T>
- Returns:
this
to permit chaining of operations.
-
addListener
@Nonnull public AsyncPromise<T> addListener(AsyncPromise<T> listener)
Adds the specified future as a listener to this future. The specified future is notified when this future is done. If this future is already completed, the specified future is notified immediately.- Specified by:
addListener
in interfaceAsyncFuture<T>
- Specified by:
addListener
in interfaceAsyncPromise<T>
- Parameters:
listener
-- Returns:
this
to permit chaining of operations.
-
await
@Nonnull public AsyncFuture<T> await() throws java.lang.InterruptedException
Waits for this future to be completed.- Specified by:
await
in interfaceAsyncFuture<T>
- Throws:
java.lang.InterruptedException
- if the current thread was interrupted
-
awaitUninterruptibly
@Nonnull public AsyncFuture<T> awaitUninterruptibly()
Waits for this future to be completed without interruption. This method catches anInterruptedException
and discards it silently.- Specified by:
awaitUninterruptibly
in interfaceAsyncFuture<T>
-
await
public boolean await(long timeout, java.util.concurrent.TimeUnit unit) throws java.lang.InterruptedException
Waits for this future to be completed within the specified time limit.- Specified by:
await
in interfaceAsyncFuture<T>
- Returns:
true
if and only if the future was completed within the specified time limit- Throws:
java.lang.InterruptedException
- if the current thread was interrupted
-
awaitUninterruptibly
public boolean awaitUninterruptibly(long timeout, java.util.concurrent.TimeUnit unit)
Waits for this future to be completed within the specified time limit without interruption. This method catches anInterruptedException
and discards it silently.- Specified by:
awaitUninterruptibly
in interfaceAsyncFuture<T>
- Returns:
true
if and only if the future was completed within the specified time limit
-
cancel
public boolean cancel(boolean mayInterruptIfRunning)
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
isDone()
will always return true. Subsequent calls toisCancelled()
will always return true if this method returned true.- Specified by:
cancel
in interfacejava.util.concurrent.Future<T>
- Parameters:
mayInterruptIfRunning
- true if the thread executing this task should be interrupted; otherwise, in-progress tasks are allowed to complete- Returns:
- false if the task could not be cancelled, typically because it has already completed normally; true otherwise
-
isCancelled
public boolean isCancelled()
Returns true if this task was cancelled before it completed normally.- Specified by:
isCancelled
in interfacejava.util.concurrent.Future<T>
- Returns:
- true if this task was cancelled before it completed
-
isDone
public boolean isDone()
Returns true if this task completed. Completion may be due to normal termination, an exception, or cancellation -- in all of these cases, this method will return true.- Specified by:
isDone
in interfacejava.util.concurrent.Future<T>
- Returns:
- true if this task completed
-
get
public T get() throws java.lang.InterruptedException, java.util.concurrent.ExecutionException
Waits if necessary for the computation to complete, and then retrieves its result.- Specified by:
get
in interfacejava.util.concurrent.Future<T>
- Returns:
- the computed result
- Throws:
java.util.concurrent.CancellationException
- if the computation was cancelledjava.util.concurrent.ExecutionException
- if the computation threw an exceptionjava.lang.InterruptedException
- if the current thread was interrupted while waiting
-
get
public T get(long timeout, java.util.concurrent.TimeUnit unit) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException, java.util.concurrent.TimeoutException
Waits if necessary for at most the given time for the computation to complete, and then retrieves its result, if available.- Specified by:
get
in interfacejava.util.concurrent.Future<T>
- Parameters:
timeout
- the maximum time to waitunit
- the time unit of the timeout argument- Returns:
- the computed result
- Throws:
java.util.concurrent.CancellationException
- if the computation was cancelledjava.util.concurrent.ExecutionException
- if the computation threw an exceptionjava.lang.InterruptedException
- if the current thread was interrupted while waitingjava.util.concurrent.TimeoutException
- if the wait timed out
-
getNow
public T getNow()
Description copied from interface:AsyncFuture
Non-blocking variant ofFuture.get()
- Specified by:
getNow
in interfaceAsyncFuture<T>
- Returns:
- value or
null
-
-