org.springframework.scheduling.concurrent

## Class ConcurrentTaskScheduler

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

- All Implemented Interfaces:
    Executor, AsyncTaskExecutor, TaskExecutor, SchedulingTaskExecutor, TaskScheduler

      public class ConcurrentTaskScheduler
      extends ConcurrentTaskExecutor
      implements TaskScheduler

  Adapter that takes a JDK 1.5 `java.util.concurrent.ScheduledExecutorService` and exposes a Spring `TaskScheduler` for it. Extends `ConcurrentTaskExecutor` in order to implement the `SchedulingTaskExecutor` interface as well.

  Note that there is a pre-built `ThreadPoolTaskScheduler` that allows for defining a JDK 1.5 `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
  See Also:
    `ScheduledExecutorService`, `ScheduledThreadPoolExecutor`, `Executors`, `ThreadPoolTaskScheduler`

- - ### Field Summary

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

      `TIMEOUT_IMMEDIATE, TIMEOUT_INDEFINITE`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ConcurrentTaskScheduler()` Create a new ConcurrentTaskScheduler, using a single thread executor as default.
    `ConcurrentTaskScheduler(Executor concurrentExecutor, ScheduledExecutorService scheduledExecutor)` Create a new ConcurrentTaskScheduler, using the given JDK 1.5 executors as delegates.
    `ConcurrentTaskScheduler(ScheduledExecutorService scheduledExecutor)` Create a new ConcurrentTaskScheduler, using the given JDK 1.5 executor as shared delegate.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `ScheduledFuture` | `schedule(Runnable task, Date 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, Date startTime, long period)` Schedule the given `Runnable`, invoking it at the specified execution time and subsequently with the given period.
    `ScheduledFuture` | `scheduleAtFixedRate(Runnable task, long period)` Schedule the given `Runnable`, starting as soon as possible and invoking it with the given period.
    `ScheduledFuture` | `scheduleWithFixedDelay(Runnable task, Date startTime, long 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.
    `ScheduledFuture` | `scheduleWithFixedDelay(Runnable task, long 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.
    `void` | `setErrorHandler(ErrorHandler errorHandler)` Provide an `ErrorHandler` strategy.
    `void` | `setScheduledExecutor(ScheduledExecutorService scheduledExecutor)` Specify the JDK 1.5 scheduled executor to delegate to.

    - ### Methods inherited from class org.springframework.scheduling.concurrent.ConcurrentTaskExecutor

      `execute, execute, getConcurrentExecutor, prefersShortLivedTasks, setConcurrentExecutor, submit, submit`

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

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

- - ### Constructor Detail

    - #### ConcurrentTaskScheduler

          public ConcurrentTaskScheduler()

      Create a new ConcurrentTaskScheduler, using a single thread executor as default.
      See Also:
        `Executors.newSingleThreadScheduledExecutor()`

    - #### ConcurrentTaskScheduler

          public ConcurrentTaskScheduler(ScheduledExecutorService scheduledExecutor)

      Create a new ConcurrentTaskScheduler, using the given JDK 1.5 executor as shared delegate.
      Parameters:
        `scheduledExecutor` - the JDK 1.5 scheduled executor to delegate to for `SchedulingTaskExecutor` as well as `TaskScheduler` invocations

    - #### ConcurrentTaskScheduler

          public ConcurrentTaskScheduler(Executor concurrentExecutor,
                                 ScheduledExecutorService scheduledExecutor)

      Create a new ConcurrentTaskScheduler, using the given JDK 1.5 executors as delegates.
      Parameters:
        `concurrentExecutor` - the JDK 1.5 concurrent executor to delegate to for `SchedulingTaskExecutor` invocations
        `scheduledExecutor` - the JDK 1.5 scheduled executor to delegate to for `TaskScheduler` invocations

  - ### Method Detail

    - #### setScheduledExecutor

          public final void setScheduledExecutor(ScheduledExecutorService scheduledExecutor)

      Specify the JDK 1.5 scheduled executor to delegate to.

      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(ErrorHandler errorHandler)

      Provide an `ErrorHandler` strategy.

    - #### schedule

          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, e.g. a `CronTrigger` object wrapping a cron expression
      Returns:
        a `ScheduledFuture` representing pending completion of the task, or `null` if the given Trigger object never fires (i.e. returns `null` from `Trigger.nextExecutionTime(org.springframework.scheduling.TriggerContext)`)
      See Also:
        `CronTrigger`

    - #### schedule

          public ScheduledFuture schedule(Runnable task,
                                 Date 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 completion of the task

    - #### scheduleAtFixedRate

          public ScheduledFuture scheduleAtFixedRate(Runnable task,
                                            Date startTime,
                                            long 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 (in milliseconds)
      Returns:
        a `ScheduledFuture` representing pending completion of the task

    - #### scheduleAtFixedRate

          public ScheduledFuture scheduleAtFixedRate(Runnable task,
                                            long 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 (in milliseconds)
      Returns:
        a `ScheduledFuture` representing pending completion of the task

    - #### scheduleWithFixedDelay

          public ScheduledFuture scheduleWithFixedDelay(Runnable task,
                                               Date startTime,
                                               long 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 (in milliseconds)
      Returns:
        a `ScheduledFuture` representing pending completion of the task

    - #### scheduleWithFixedDelay

          public ScheduledFuture scheduleWithFixedDelay(Runnable task,
                                               long 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 interval between successive executions of the task (in milliseconds)
      Returns:
        a `ScheduledFuture` representing pending completion of the task