Interface BlockingExecutor
- All Superinterfaces:
AutoCloseable,Executor
Allows safe invocation of tasks that require resources not otherwise available after
close() to block a service from stopping.- Author:
- Paul Ferraro
-
Method Summary
Modifier and TypeMethodDescriptionvoidclose()<R> Optional<R> Executes the specified task, but only if the service was not already closed.<R> Optional<R> Executes the specified task, but only if the service was not already closed.static BlockingExecutornewInstance(Runnable closeTask) Creates new blocking executor that runs the specified task uponclose().
-
Method Details
-
execute
Executes the specified task, but only if the service was not already closed. If service is already closed, the task is not run. If executed, the specified task must return a non-null value, to be distinguishable from a non-execution.- Parameters:
executeTask- a task to execute- Returns:
- an optional value that is present only if the specified task was run.
-
execute
Executes the specified task, but only if the service was not already closed. If service is already closed, the task is not run. If executed, the specified task must return a non-null value, to be distinguishable from a non-execution.- Parameters:
executeTask- a task to execute- Returns:
- an optional value that is present only if the specified task was run.
- Throws:
Exception- if the specified task fails to execute
-
close
void close()- Specified by:
closein interfaceAutoCloseable
-
newInstance
Creates new blocking executor that runs the specified task uponclose(). The specified task will only execute once, upon the firstclose()invocation.- Parameters:
closeTask- a task to run when this executor is closed.- Returns:
- a new blocking executor
-