Package org.springframework.core.task.support

# Class TaskExecutorAdapter

java.lang.Object
org.springframework.core.task.support.TaskExecutorAdapter

All Implemented Interfaces:
  `Executor`, `AsyncListenableTaskExecutor`, `AsyncTaskExecutor`, `TaskExecutor`

public class TaskExecutorAdapter extends Object implements AsyncListenableTaskExecutor
Adapter that takes a JDK `java.util.concurrent.Executor` and exposes a Spring `TaskExecutor` for it. Also detects an extended `java.util.concurrent.ExecutorService`, adapting the `AsyncTaskExecutor` interface accordingly.

Since:
  3.0
Author:
  Juergen Hoeller
See Also:
  - `Executor`
  - `ExecutorService`
  - `Executors`

## Field Summary

### Fields inherited from interface org.springframework.core.task.AsyncTaskExecutor

`TIMEOUT_IMMEDIATE, TIMEOUT_INDEFINITE`

## Constructor Summary

Constructors
Constructor
Description
`TaskExecutorAdapter(Executor concurrentExecutor)`
Create a new TaskExecutorAdapter, using the given JDK concurrent executor.

## Method Summary

Modifier and Type
Method
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.
`final void`
`setTaskDecorator(TaskDecorator taskDecorator)`
Specify a custom `TaskDecorator` to be applied to any `Runnable` about to be executed.
`Future<?>`
`submit(Runnable task)`
Submit a Runnable task for execution, receiving a Future representing that task.
`<T> Future<T>`
`submit(Callable<T> task)`
Submit a Callable task for execution, receiving a Future representing that task.
`ListenableFuture<?>`
`submitListenable(Runnable task)`
Submit a `Runnable` task for execution, receiving a `ListenableFuture` representing that task.
`<T> ListenableFuture<T>`
`submitListenable(Callable<T> task)`
Submit a `Callable` task for execution, receiving a `ListenableFuture` representing that task.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.springframework.core.task.AsyncTaskExecutor

`execute, submitCompletable, submitCompletable`

## Constructor Details

### TaskExecutorAdapter

public TaskExecutorAdapter(Executor concurrentExecutor)
Create a new TaskExecutorAdapter, using the given JDK concurrent executor.

Parameters:
  `concurrentExecutor` - the JDK concurrent executor to delegate to

## Method Details

### setTaskDecorator

public final void setTaskDecorator(TaskDecorator taskDecorator)
Specify a custom `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.

Since:
  4.3

### execute

public void execute(Runnable task)
Delegates to the specified JDK concurrent executor.

Specified by:
  `execute` in interface `Executor`
Specified by:
  `execute` in interface `TaskExecutor`
Parameters:
  `task` - the `Runnable` to execute (never `null`)
See Also:
  - `Executor.execute(Runnable)`

### submit

public Future<?> submit(Runnable task)
Description copied from interface: `AsyncTaskExecutor`
Submit a Runnable task for execution, receiving a Future representing that task. The Future will return a `null` result upon completion.

As of 6.1, this method comes with a default implementation that delegates to `TaskExecutor.execute(Runnable)`.

Specified by:
  `submit` in interface `AsyncTaskExecutor`
Parameters:
  `task` - the `Runnable` to execute (never `null`)
Returns:
  a Future representing pending completion of the task

### submit

public <T> Future<T> submit(Callable<T> task)
Description copied from interface: `AsyncTaskExecutor`
Submit a Callable task for execution, receiving a Future representing that task. The Future will return the Callable's result upon completion.

As of 6.1, this method comes with a default implementation that delegates to `TaskExecutor.execute(Runnable)`.

Specified by:
  `submit` in interface `AsyncTaskExecutor`
Parameters:
  `task` - the `Callable` to execute (never `null`)
Returns:
  a Future representing pending completion of the task

### submitListenable

public ListenableFuture<?> submitListenable(Runnable task)
Description copied from interface: `AsyncListenableTaskExecutor`
Submit a `Runnable` task for execution, receiving a `ListenableFuture` representing that task. The Future will return a `null` result upon completion.

Specified by:
  `submitListenable` in interface `AsyncListenableTaskExecutor`
Parameters:
  `task` - the `Runnable` to execute (never `null`)
Returns:
  a `ListenableFuture` representing pending completion of the task

### submitListenable

public <T> ListenableFuture<T> submitListenable(Callable<T> task)
Description copied from interface: `AsyncListenableTaskExecutor`
Submit a `Callable` task for execution, receiving a `ListenableFuture` representing that task. The Future will return the Callable's result upon completion.

Specified by:
  `submitListenable` in interface `AsyncListenableTaskExecutor`
Parameters:
  `task` - the `Callable` to execute (never `null`)
Returns:
  a `ListenableFuture` representing pending completion of the task

### doExecute

protected void doExecute(Executor concurrentExecutor, @Nullable TaskDecorator taskDecorator, Runnable runnable) throws RejectedExecutionException
Actually execute the given `Runnable` (which may be a user-supplied task or a wrapper around a user-supplied task) with the given executor.

Parameters:
  `concurrentExecutor` - the underlying JDK concurrent executor to delegate to
  `taskDecorator` - the specified decorator to be applied, if any
  `runnable` - the runnable to execute
Throws:
  `RejectedExecutionException` - if the given runnable cannot be accepted
Since:
  4.3