Package org.springframework.scheduling.concurrent

# Class ConcurrentTaskScheduler

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

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

Direct Known Subclasses:
  `DefaultManagedTaskScheduler`

public class ConcurrentTaskScheduler extends ConcurrentTaskExecutor implements TaskScheduler
Adapter that takes a `java.util.concurrent.ScheduledExecutorService` and exposes a Spring `TaskScheduler` for it. Extends `ConcurrentTaskExecutor` in order to implement the `SchedulingTaskExecutor` interface as well.

Autodetects a JSR-236 `ManagedScheduledExecutorService` in order to use it for trigger-based scheduling if possible, instead of Spring's local trigger management which ends up delegating to regular delay-based scheduling against the `java.util.concurrent.ScheduledExecutorService` API. For JSR-236 style lookup in a Jakarta EE environment, consider using `DefaultManagedTaskScheduler`.

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

Since:
  3.0
Author:
  Juergen Hoeller, Mark Fisher, Arjen Poutsma
See Also:
  - `ScheduledExecutorService`
  - `ScheduledThreadPoolExecutor`
  - `Executors`
  - `DefaultManagedTaskScheduler`
  - `ThreadPoolTaskScheduler`

## Nested Class Summary

## Nested classes/interfaces inherited from class org.springframework.scheduling.concurrent.ConcurrentTaskExecutor

`ConcurrentTaskExecutor.ManagedTaskBuilder`

## Field Summary

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

`TIMEOUT_IMMEDIATE, TIMEOUT_INDEFINITE`

## Constructor Summary

Constructors
Constructor
Description
`ConcurrentTaskScheduler()`
Deprecated.
in favor of `ConcurrentTaskScheduler(ScheduledExecutorService)` with an externally provided Executor
`ConcurrentTaskScheduler(Executor concurrentExecutor, ScheduledExecutorService scheduledExecutor)`
Create a new ConcurrentTaskScheduler, using the given `Executor` and `ScheduledExecutorService` as delegates.
`ConcurrentTaskScheduler(ScheduledExecutorService scheduledExecutor)`
Create a new ConcurrentTaskScheduler, using the given `ScheduledExecutorService` as shared delegate.

## Method Summary

Modifier and Type
Method
Description
`void`
`execute(Runnable task)`
`Clock`
`getClock()`
Return the clock to use for scheduling purposes.
`ScheduledFuture<?>`
`schedule(Runnable task, Instant startTime)`
Schedule the given `Runnable`, invoking it at the specified execution time.
`ScheduledFuture<?>`
`schedule(Runnable task, Trigger trigger)`
Schedule the given `Runnable`, invoking it whenever the trigger indicates a next execution time.
`ScheduledFuture<?>`
`scheduleAtFixedRate(Runnable task, Duration period)`
Schedule the given `Runnable`, starting as soon as possible and invoking it with the given period.
`ScheduledFuture<?>`
`scheduleAtFixedRate(Runnable task, Instant startTime, Duration period)`
Schedule the given `Runnable`, invoking it at the specified execution time and subsequently with the given period.
`ScheduledFuture<?>`
`scheduleWithFixedDelay(Runnable task, Duration delay)`
Schedule the given `Runnable`, starting as soon as possible and invoking it with the given delay between the completion of one execution and the start of the next.
`ScheduledFuture<?>`
`scheduleWithFixedDelay(Runnable task, Instant startTime, Duration delay)`
Schedule the given `Runnable`, invoking it at the specified execution time and subsequently with the given delay between the completion of one execution and the start of the next.
`void`
`setClock(Clock clock)`
Set the clock to use for scheduling purposes.
`void`
`setErrorHandler(org.springframework.util.ErrorHandler errorHandler)`
Provide an `ErrorHandler` strategy.
`void`
`setScheduledExecutor(ScheduledExecutorService scheduledExecutor)`
Specify the `ScheduledExecutorService` to delegate to.
`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 org.springframework.scheduling.concurrent.ConcurrentTaskExecutor

`execute, getConcurrentExecutor, setConcurrentExecutor, setTaskDecorator`

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

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

`schedule, scheduleAtFixedRate, scheduleAtFixedRate, scheduleWithFixedDelay, scheduleWithFixedDelay`

## Constructor Details

### ConcurrentTaskScheduler

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

See Also:
  - `Executors.newSingleThreadScheduledExecutor()`

### ConcurrentTaskScheduler

public ConcurrentTaskScheduler(@Nullable ScheduledExecutorService scheduledExecutor)
Create a new ConcurrentTaskScheduler, using the given `ScheduledExecutorService` as shared delegate.

Autodetects a JSR-236 `ManagedScheduledExecutorService` in order to use it for trigger-based scheduling if possible, instead of Spring's local trigger management.

Parameters:
  `scheduledExecutor` - the `ScheduledExecutorService` to delegate to for `SchedulingTaskExecutor` as well as `TaskScheduler` invocations

### ConcurrentTaskScheduler

public ConcurrentTaskScheduler(Executor concurrentExecutor, ScheduledExecutorService scheduledExecutor)
Create a new ConcurrentTaskScheduler, using the given `Executor` and `ScheduledExecutorService` as delegates.

Autodetects a JSR-236 `ManagedScheduledExecutorService` in order to use it for trigger-based scheduling if possible, instead of Spring's local trigger management.

Parameters:
  `concurrentExecutor` - the `Executor` to delegate to for `SchedulingTaskExecutor` invocations
  `scheduledExecutor` - the `ScheduledExecutorService` to delegate to for `TaskScheduler` invocations

## Method Details

### setScheduledExecutor

public void setScheduledExecutor(ScheduledExecutorService scheduledExecutor)
Specify the `ScheduledExecutorService` to delegate to.

Autodetects a JSR-236 `ManagedScheduledExecutorService` in order to use it for trigger-based scheduling if possible, instead of Spring's local trigger management.

Note: This will only apply to `TaskScheduler` invocations. If you want the given executor to apply to `SchedulingTaskExecutor` invocations as well, pass the same executor reference to `ConcurrentTaskExecutor.setConcurrentExecutor(java.util.concurrent.Executor)`.

See Also:
  - `ConcurrentTaskExecutor.setConcurrentExecutor(java.util.concurrent.Executor)`

### setErrorHandler

public void setErrorHandler(org.springframework.util.ErrorHandler errorHandler)
Provide an `ErrorHandler` strategy.

### setClock

public void setClock(Clock clock)
Set the clock to use for scheduling purposes.

The default clock is the system clock for the default time zone.

Since:
  5.3
See Also:
  - `Clock.systemDefaultZone()`

### getClock

public Clock getClock()
Description copied from interface: `TaskScheduler`
Return the clock to use for scheduling purposes.

Specified by:
  `getClock` in interface `TaskScheduler`
See Also:
  - `Clock.systemDefaultZone()`

### execute

public void execute(Runnable task)

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

### submit

public Future<?> submit(Runnable task)

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

### submit

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

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

### submitListenable

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

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

### submitListenable

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

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

### schedule

@Nullable public ScheduledFuture<?> schedule(Runnable task, Trigger trigger)
Description copied from interface: `TaskScheduler`
Schedule the given `Runnable`, invoking it whenever the trigger indicates a next execution time.

Execution will end once the scheduler shuts down or the returned `ScheduledFuture` gets cancelled.

Specified by:
  `schedule` in interface `TaskScheduler`
Parameters:
  `task` - the Runnable to execute whenever the trigger fires
  `trigger` - an implementation of the `Trigger` interface, for example, a `CronTrigger` object wrapping a cron expression
Returns:
  a `ScheduledFuture` representing pending execution of the task, or `null` if the given Trigger object never fires (i.e. returns `null` from `Trigger.nextExecution(org.springframework.scheduling.TriggerContext)`)
See Also:
  - `CronTrigger`

### schedule

public ScheduledFuture<?> schedule(Runnable task, Instant startTime)
Description copied from interface: `TaskScheduler`
Schedule the given `Runnable`, invoking it at the specified execution time.

Execution will end once the scheduler shuts down or the returned `ScheduledFuture` gets cancelled.

Specified by:
  `schedule` in interface `TaskScheduler`
Parameters:
  `task` - the Runnable to execute whenever the trigger fires
  `startTime` - the desired execution time for the task (if this is in the past, the task will be executed immediately, i.e. as soon as possible)
Returns:
  a `ScheduledFuture` representing pending execution of the task

### scheduleAtFixedRate

public ScheduledFuture<?> scheduleAtFixedRate(Runnable task, Instant startTime, Duration period)
Description copied from interface: `TaskScheduler`
Schedule the given `Runnable`, invoking it at the specified execution time and subsequently with the given period.

Execution will end once the scheduler shuts down or the returned `ScheduledFuture` gets cancelled.

Specified by:
  `scheduleAtFixedRate` in interface `TaskScheduler`
Parameters:
  `task` - the Runnable to execute whenever the trigger fires
  `startTime` - the desired first execution time for the task (if this is in the past, the task will be executed immediately, i.e. as soon as possible)
  `period` - the interval between successive executions of the task
Returns:
  a `ScheduledFuture` representing pending execution of the task

### scheduleAtFixedRate

public ScheduledFuture<?> scheduleAtFixedRate(Runnable task, Duration period)
Description copied from interface: `TaskScheduler`
Schedule the given `Runnable`, starting as soon as possible and invoking it with the given period.

Execution will end once the scheduler shuts down or the returned `ScheduledFuture` gets cancelled.

Specified by:
  `scheduleAtFixedRate` in interface `TaskScheduler`
Parameters:
  `task` - the Runnable to execute whenever the trigger fires
  `period` - the interval between successive executions of the task
Returns:
  a `ScheduledFuture` representing pending execution of the task

### scheduleWithFixedDelay

public ScheduledFuture<?> scheduleWithFixedDelay(Runnable task, Instant startTime, Duration delay)
Description copied from interface: `TaskScheduler`
Schedule the given `Runnable`, invoking it at the specified execution time and subsequently with the given delay between the completion of one execution and the start of the next.

Execution will end once the scheduler shuts down or the returned `ScheduledFuture` gets cancelled.

Specified by:
  `scheduleWithFixedDelay` in interface `TaskScheduler`
Parameters:
  `task` - the Runnable to execute whenever the trigger fires
  `startTime` - the desired first execution time for the task (if this is in the past, the task will be executed immediately, i.e. as soon as possible)
  `delay` - the delay between the completion of one execution and the start of the next
Returns:
  a `ScheduledFuture` representing pending execution of the task

### scheduleWithFixedDelay

public ScheduledFuture<?> scheduleWithFixedDelay(Runnable task, Duration delay)
Description copied from interface: `TaskScheduler`
Schedule the given `Runnable`, starting as soon as possible and invoking it with the given delay between the completion of one execution and the start of the next.

Execution will end once the scheduler shuts down or the returned `ScheduledFuture` gets cancelled.

Specified by:
  `scheduleWithFixedDelay` in interface `TaskScheduler`
Parameters:
  `task` - the Runnable to execute whenever the trigger fires
  `delay` - the delay between the completion of one execution and the start of the next
Returns:
  a `ScheduledFuture` representing pending execution of the task