Class LoggingFuture<V>
java.lang.Object
de.aristaflow.adept2.util.threading.LoggingFuture<V>
- Type Parameters:
V- The result type returned by this Future'sgetmethod.
- All Implemented Interfaces:
Runnable,Future<V>,RunnableFuture<V>
- Direct Known Subclasses:
LoggingScheduledFuture
A future that wraps another future and logs all occurred exceptions and the
result for information purpose if no one was interested in it. This is
especially useful when using an executor service and ignoring the returned
future. If the result (or the exception) of the future is retrieved, no
additional logging will take place.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static final classThis clean-up task logs the result of a future which no one retrieved. -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final Cleanup<RuntimeException>TheCleanupcalled as post-mortem action for this future.protected final LoggerThe logger for logging unhandled results, Exception, RuntimeException or Error.protected final booleanWhether the result of the future is relevant and therefore it should be logged if it is not retrieved. -
Constructor Summary
ConstructorsConstructorDescriptionLoggingFuture(RunnableFuture<V> future, boolean resultRelevant, Logger logger) Creates a new future wrapping the designatedRunnableFuturelogging the outcome of the future if no one has retrieved it. -
Method Summary
-
Field Details
-
resultRelevant
protected final boolean resultRelevantWhether the result of the future is relevant and therefore it should be logged if it is not retrieved. Runnables do not have a return value and therefore the result is irrelevant and need not be logged. -
logger
The logger for logging unhandled results, Exception, RuntimeException or Error. -
cleanup
TheCleanupcalled as post-mortem action for this future. This will log the (exceptional) result of this future in case the result has not been retrieved. For instance, this avoids loosing exceptions.
-
-
Constructor Details
-
LoggingFuture
Creates a new future wrapping the designatedRunnableFuturelogging the outcome of the future if no one has retrieved it.- Parameters:
future- TheRunnableFuturewhich to wrap.resultRelevant- Whether the result of the future is relevant and therefore it should be logged if it is not retrieved. Exceptional results will always be logged.logger- The logger for logging unhandled results, Exception, RuntimeException or Error.
-
-
Method Details
-
getWrappedFutureRunnable
Gets the wrapped future runnable. This is useful for subclasses requiring a more specific object.- Returns:
- The wrapped future runnable.
-
run
public void run()- Specified by:
runin interfaceRunnable- Specified by:
runin interfaceRunnableFuture<V>
-
cancel
public boolean cancel(boolean mayInterruptIfRunning) -
hashCode
public int hashCode() -
equals
-
isCancelled
public boolean isCancelled()- Specified by:
isCancelledin interfaceFuture<V>
-
isDone
public boolean isDone() -
get
- Specified by:
getin interfaceFuture<V>- Throws:
InterruptedExceptionExecutionException
-
get
public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException - Specified by:
getin interfaceFuture<V>- Throws:
InterruptedExceptionExecutionExceptionTimeoutException
-