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