org.springframework.scheduling.concurrent

## Class ConcurrentTaskExecutor

- java.lang.Object
- - org.springframework.scheduling.concurrent.ConcurrentTaskExecutor

All Implemented Interfaces:
  Executor, AsyncTaskExecutor, TaskExecutor, SchedulingTaskExecutor

Direct Known Subclasses:
  ConcurrentTaskScheduler

    public class ConcurrentTaskExecutor
    extends Object
    implements SchedulingTaskExecutor

Adapter that takes a JDK 1.5 `java.util.concurrent.Executor` and exposes a Spring `TaskExecutor` for it. Also detects an extended `java.util.concurrent.ExecutorService`, adapting the `AsyncTaskExecutor` interface accordingly.

Note that there is a pre-built `ThreadPoolTaskExecutor` that allows for defining a JDK 1.5 `ThreadPoolExecutor` in bean style, exposing it as a Spring `TaskExecutor` directly. This is a convenient alternative to a raw ThreadPoolExecutor definition with a separate definition of the present adapter class.

Since:
  2.0
Author:
  Juergen Hoeller
See Also:
  `Executor`, `ExecutorService`, `ThreadPoolExecutor`, `Executors`, `ThreadPoolTaskExecutor`

### Field Summary

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

`TIMEOUT_IMMEDIATE, TIMEOUT_INDEFINITE`

### Constructor Summary

Constructors
Constructor and Description
`ConcurrentTaskExecutor()` Create a new ConcurrentTaskExecutor, using a single thread executor as default.
`ConcurrentTaskExecutor(Executor concurrentExecutor)` Create a new ConcurrentTaskExecutor, using the given JDK 1.5 concurrent executor.

### Method Summary

Methods
`void` `execute(Runnable task)` Execute the given `task`.
`void` `execute(Runnable task, long startTimeout)` Execute the given `task`.
`Executor` `getConcurrentExecutor()` Return the JDK 1.5 concurrent executor that this adapter delegates to.
`boolean` `prefersShortLivedTasks()` This task executor prefers short-lived work units.
`void` `setConcurrentExecutor(Executor concurrentExecutor)` Specify the JDK 1.5 concurrent executor to delegate to.
`<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.

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

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

### Constructor Detail

#### ConcurrentTaskExecutor

    public ConcurrentTaskExecutor()

Create a new ConcurrentTaskExecutor, using a single thread executor as default.

See Also:
  `Executors.newSingleThreadExecutor()`

#### ConcurrentTaskExecutor

    public ConcurrentTaskExecutor(Executor concurrentExecutor)

Create a new ConcurrentTaskExecutor, using the given JDK 1.5 concurrent executor.

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

### Method Detail

#### setConcurrentExecutor

    public final void setConcurrentExecutor(Executor concurrentExecutor)

Specify the JDK 1.5 concurrent executor to delegate to.

#### getConcurrentExecutor

    public final Executor getConcurrentExecutor()

Return the JDK 1.5 concurrent executor that this adapter delegates to.

#### execute

    public void execute(Runnable task)

Description copied from interface: `TaskExecutor`
Execute the given `task`.

The call might return immediately if the implementation uses an asynchronous execution strategy, or might block in the case of synchronous execution.

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

#### execute

    public void execute(Runnable task,
               long startTimeout)

Description copied from interface: `AsyncTaskExecutor`
Execute the given `task`.

Specified by:
  `execute` in interface `AsyncTaskExecutor`
Parameters:
  `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)`).

#### 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.

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.

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

#### prefersShortLivedTasks

    public boolean prefersShortLivedTasks()

This task executor prefers short-lived work units.

Specified by:
  `prefersShortLivedTasks` in interface `SchedulingTaskExecutor`
Returns:
  `true` if this `TaskExecutor` prefers short-lived tasks