public class TaskExecutorAdapter extends Object implements AsyncListenableTaskExecutor
java.util.concurrent.Executor
and
exposes a Spring TaskExecutor
for it.
Also detects an extended java.util.concurrent.ExecutorService
, adapting
the AsyncTaskExecutor
interface accordingly.Executor
,
ExecutorService
,
Executors
TIMEOUT_IMMEDIATE, TIMEOUT_INDEFINITE
Constructor and Description |
---|
TaskExecutorAdapter(Executor concurrentExecutor)
Create a new TaskExecutorAdapter,
using the given JDK concurrent executor.
|
Modifier and Type | Method and Description |
---|---|
protected void |
doExecute(Executor concurrentExecutor,
TaskDecorator taskDecorator,
Runnable runnable)
Actually execute the given
Runnable (which may be a user-supplied task
or a wrapper around a user-supplied task) with the given executor. |
void |
execute(Runnable task)
Delegates to the specified JDK concurrent executor.
|
void |
execute(Runnable task,
long startTimeout)
Execute the given
task . |
void |
setTaskDecorator(TaskDecorator taskDecorator)
Specify a custom
TaskDecorator to be applied to any Runnable
about to be executed. |
<T> Future<T> |
submit(Callable<T> task)
Submit a Callable task for execution, receiving a Future representing that task.
|
Future<?> |
submit(Runnable task)
Submit a Runnable task for execution, receiving a Future representing that task.
|
<T> ListenableFuture<T> |
submitListenable(Callable<T> task)
Submit a
Callable task for execution, receiving a ListenableFuture
representing that task. |
ListenableFuture<?> |
submitListenable(Runnable task)
Submit a
Runnable task for execution, receiving a ListenableFuture
representing that task. |
public TaskExecutorAdapter(Executor concurrentExecutor)
concurrentExecutor
- the JDK concurrent executor to delegate topublic final void setTaskDecorator(TaskDecorator taskDecorator)
TaskDecorator
to be applied to any Runnable
about to be executed.
Note that such a decorator is not necessarily being applied to the
user-supplied Runnable
/Callable
but rather to the actual
execution callback (which may be a wrapper around the user-supplied task).
The primary use case is to set some execution context around the task's invocation, or to provide some monitoring/statistics for task execution.
NOTE: Exception handling in TaskDecorator
implementations
is limited to plain Runnable
execution via execute
calls.
In case of #submit
calls, the exposed Runnable
will be a
FutureTask
which does not propagate any exceptions; you might
have to cast it and call Future#get
to evaluate exceptions.
public void execute(Runnable task)
execute
in interface Executor
execute
in interface TaskExecutor
task
- the Runnable
to execute (never null
)Executor.execute(Runnable)
public void execute(Runnable task, long startTimeout)
AsyncTaskExecutor
task
.execute
in interface AsyncTaskExecutor
task
- the Runnable
to execute (never null
)startTimeout
- the time duration (milliseconds) within which the task is
supposed to start. This is intended as a hint to the executor, allowing for
preferred handling of immediate tasks. Typical values are AsyncTaskExecutor.TIMEOUT_IMMEDIATE
or AsyncTaskExecutor.TIMEOUT_INDEFINITE
(the default as used by TaskExecutor.execute(Runnable)
).public Future<?> submit(Runnable task)
AsyncTaskExecutor
null
result upon completion.submit
in interface AsyncTaskExecutor
task
- the Runnable
to execute (never null
)public <T> Future<T> submit(Callable<T> task)
AsyncTaskExecutor
submit
in interface AsyncTaskExecutor
task
- the Callable
to execute (never null
)public ListenableFuture<?> submitListenable(Runnable task)
AsyncListenableTaskExecutor
Runnable
task for execution, receiving a ListenableFuture
representing that task. The Future will return a null
result upon completion.submitListenable
in interface AsyncListenableTaskExecutor
task
- the Runnable
to execute (never null
)ListenableFuture
representing pending completion of the taskpublic <T> ListenableFuture<T> submitListenable(Callable<T> task)
AsyncListenableTaskExecutor
Callable
task for execution, receiving a ListenableFuture
representing that task. The Future will return the Callable's result upon
completion.submitListenable
in interface AsyncListenableTaskExecutor
task
- the Callable
to execute (never null
)ListenableFuture
representing pending completion of the taskprotected void doExecute(Executor concurrentExecutor, @Nullable TaskDecorator taskDecorator, Runnable runnable) throws RejectedExecutionException
Runnable
(which may be a user-supplied task
or a wrapper around a user-supplied task) with the given executor.concurrentExecutor
- the underlying JDK concurrent executor to delegate totaskDecorator
- the specified decorator to be applied, if anyrunnable
- the runnable to executeRejectedExecutionException
- if the given runnable cannot be accepted