Package org.springframework.scheduling.concurrent

# Class ConcurrentTaskExecutor

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

All Implemented Interfaces:
  `Executor`, `org.springframework.core.task.AsyncListenableTaskExecutor`, `org.springframework.core.task.AsyncTaskExecutor`, `org.springframework.core.task.TaskExecutor`, `SchedulingTaskExecutor`

Direct Known Subclasses:
  `ConcurrentTaskScheduler`, `DefaultManagedTaskExecutor`

public class ConcurrentTaskExecutor extends Object implements org.springframework.core.task.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 Jakarta EE 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
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
Description
`ConcurrentTaskExecutor()`
Deprecated.
in favor of `ConcurrentTaskExecutor(Executor)` with an externally provided Executor
`ConcurrentTaskExecutor(Executor executor)`
Create a new ConcurrentTaskExecutor, using the given `Executor`.

## Method Summary

Modifier and Type
Method
Description
`void`
`execute(Runnable task)`
`void`
`execute(Runnable task, long startTimeout)`
Deprecated.
`final Executor`
`getConcurrentExecutor()`
Return the `Executor` that this adapter delegates to.
`final void`
`setConcurrentExecutor(Executor executor)`
Specify the `Executor` to delegate to.
`final void`
`setTaskDecorator(org.springframework.core.task.TaskDecorator taskDecorator)`
Specify a custom `TaskDecorator` to be applied to any `Runnable` about to be executed.
`Future<?>`
`submit(Runnable task)`
`<T> Future<T>`
`submit(Callable<T> task)`
`org.springframework.util.concurrent.ListenableFuture<?>`
`submitListenable(Runnable task)`
`<T> org.springframework.util.concurrent.ListenableFuture<T>`
`submitListenable(Callable<T> 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

`submitCompletable, submitCompletable`

### Methods inherited from interface org.springframework.scheduling.SchedulingTaskExecutor

`prefersShortLivedTasks`

## Constructor Details

### ConcurrentTaskExecutor

@Deprecated(since="6.1") public ConcurrentTaskExecutor()
Deprecated.
in favor of `ConcurrentTaskExecutor(Executor)` with an externally provided Executor
Create a new ConcurrentTaskExecutor, using a single thread executor as default.

See Also:
  - `Executors.newSingleThreadExecutor()`

### ConcurrentTaskExecutor

public ConcurrentTaskExecutor(@Nullable Executor executor)
Create a new ConcurrentTaskExecutor, using the given `Executor`.

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

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

## Method Details

### setConcurrentExecutor

public final void setConcurrentExecutor(Executor executor)
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.

### setTaskDecorator

public final void setTaskDecorator(org.springframework.core.task.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.

Since:
  4.3

### execute

public void execute(Runnable task)

Specified by:
  `execute` in interface `Executor`
Specified by:
  `execute` in interface `org.springframework.core.task.TaskExecutor`

### execute

@Deprecated public void execute(Runnable task, long startTimeout)
Deprecated.

Specified by:
  `execute` in interface `org.springframework.core.task.AsyncTaskExecutor`

### submit

public Future<?> submit(Runnable task)

Specified by:
  `submit` in interface `org.springframework.core.task.AsyncTaskExecutor`

### submit

public <T> Future<T> submit(Callable<T> task)

Specified by:
  `submit` in interface `org.springframework.core.task.AsyncTaskExecutor`

### submitListenable

public org.springframework.util.concurrent.ListenableFuture<?> submitListenable(Runnable task)

Specified by:
  `submitListenable` in interface `org.springframework.core.task.AsyncListenableTaskExecutor`

### submitListenable

public <T> org.springframework.util.concurrent.ListenableFuture<T> submitListenable(Callable<T> task)

Specified by:
  `submitListenable` in interface `org.springframework.core.task.AsyncListenableTaskExecutor`