org.springframework.scheduling.concurrent

## Class ConcurrentTaskExecutor

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

- All Implemented Interfaces:
    Executor, AsyncListenableTaskExecutor, AsyncTaskExecutor, TaskExecutor, SchedulingTaskExecutor
  Direct Known Subclasses:
    ConcurrentTaskScheduler, DefaultManagedTaskExecutor

      public class ConcurrentTaskExecutor
      extends Object
      implements AsyncListenableTaskExecutor, SchedulingTaskExecutor

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

  Autodetects a JSR-236 `ManagedExecutorService` in order to expose `ManagedTask` adapters for it, exposing a long-running hint based on `SchedulingAwareRunnable` and an identity name based on the given Runnable/Callable's `toString()`. For JSR-236 style lookup in a Java EE 7 environment, consider using `DefaultManagedTaskExecutor`.

  Note that there is a pre-built `ThreadPoolTaskExecutor` that allows for defining a `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`, `DefaultManagedTaskExecutor`, `ThreadPoolTaskExecutor`

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `protected static class` | `ConcurrentTaskExecutor.ManagedTaskBuilder` Delegate that wraps a given Runnable/Callable with a JSR-236 ManagedTask, exposing a long-running hint based on `SchedulingAwareRunnable` and a given identity name.

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

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `execute(Runnable task)` Execute the given `task`.
    `void` | `execute(Runnable task, long startTimeout)` Execute the given `task`.
    `Executor` | `getConcurrentExecutor()` Return the `Executor` that this adapter delegates to.
    `boolean` | `prefersShortLivedTasks()` This task executor prefers short-lived work units.
    `void` | `setConcurrentExecutor(Executor concurrentExecutor)` Specify the `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.
    `<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.

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

      Autodetects a JSR-236 `ManagedExecutorService` in order to expose `ManagedTask` adapters for it.

      Parameters:
        `concurrentExecutor` - the `Executor` to delegate to

  - ### Method Detail

    - #### setConcurrentExecutor

          public final void setConcurrentExecutor(Executor concurrentExecutor)

      Specify the `Executor` to delegate to.

      Autodetects a JSR-236 `ManagedExecutorService` in order to expose `ManagedTask` adapters for it.

    - #### getConcurrentExecutor

          public final Executor getConcurrentExecutor()

      Return the `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

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

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