Класс ScheduledThreadPoolExecutor
- Все реализуемые интерфейсы:
AutoCloseable, Executor, ExecutorService, ScheduledExecutorService
public class ScheduledThreadPoolExecutor extends ThreadPoolExecutor implements ScheduledExecutorService
ThreadPoolExecutor, который дополнительно позволяет планировать выполнение команд после заданной задержки или периодически. Этот класс предпочтительнее Timer, если требуется несколько рабочих потоков или дополнительные возможности и гибкость ThreadPoolExecutor (от которого наследуется этот класс). Отложенные задачи выполняются не раньше момента, когда они становятся доступными, однако никаких гарантий реального времени относительно того, когда именно после этого они начнут выполняться, нет. Задачи, запланированные на одно и то же время выполнения, становятся доступными в порядке поступления (FIFO).
Если отправленная задача отменена до начала выполнения, её выполнение подавляется. По умолчанию такая отменённая задача не удаляется автоматически из очереди работ, пока не истечёт её задержка. Это позволяет проводить дальнейшую проверку и мониторинг, но также может привести к неограниченному накоплению отменённых задач. Чтобы избежать этого, используйте setRemoveOnCancelPolicy(boolean), чтобы задачи удалялись из очереди работ сразу же при отмене.
Последовательные выполнения периодической задачи, запланированной с помощью scheduleAtFixedRate или scheduleWithFixedDelay, не перекрываются. Хотя разные выполнения могут обрабатываться разными потоками, эффекты предыдущих выполнений предшествуют эффектам последующих.
Хотя этот класс наследуется от ThreadPoolExecutor, некоторые унаследованные методы настройки для него бесполезны. В частности, поскольку он работает как пул фиксированного размера с corePoolSize потоками и неограниченной очередью, изменение maximumPoolSize не даёт полезного эффекта. Кроме того, почти никогда не следует устанавливать corePoolSize равным нулю или использовать allowCoreThreadTimeOut, поскольку это может привести к тому, что в пуле не останется потоков для обработки задач, когда они станут доступными для выполнения.
Как и ThreadPoolExecutor, если не указано иное, этот класс использует Executors.defaultThreadFactory() в качестве фабрики потоков по умолчанию и ThreadPoolExecutor.AbortPolicy в качестве обработчика отклонённых задач по умолчанию.
Примечания по расширению: Этот класс переопределяет методы execute и submit для создания внутренних объектов ScheduledFuture, управляющих задержками и планированием каждой задачи. Чтобы сохранить функциональность, все дальнейшие переопределения этих методов в подклассах должны вызывать версии суперкласса, что фактически отключает дополнительную настройку задач. Однако этот класс предоставляет альтернативный защищённый метод расширения decorateTask (по одной версии для Runnable и Callable), который можно использовать для настройки конкретных типов задач, применяемых для выполнения команд, переданных через execute, submit, schedule, scheduleAtFixedRate и scheduleWithFixedDelay. По умолчанию ScheduledThreadPoolExecutor использует тип задачи, расширяющий FutureTask. Однако его можно изменить или заменить с помощью подклассов следующего вида:
public class CustomScheduledExecutor extends ScheduledThreadPoolExecutor {
static class CustomTask<V> implements RunnableScheduledFuture<V> { ... }
protected <V> RunnableScheduledFuture<V> decorateTask(
Runnable r, RunnableScheduledFuture<V> task) {
return new CustomTask<V>(r, task);
}
protected <V> RunnableScheduledFuture<V> decorateTask(
Callable<V> c, RunnableScheduledFuture<V> task) {
return new CustomTask<V>(c, task);
}
// ... add constructors, etc.
}
- Начиная с:
- 1.5
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в классе ThreadPoolExecutor
ThreadPoolExecutor.AbortPolicy, ThreadPoolExecutor.CallerRunsPolicy, ThreadPoolExecutor.DiscardOldestPolicy, ThreadPoolExecutor.DiscardPolicy
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
ScheduledThreadPoolExecutor |
Создаёт новый ScheduledThreadPoolExecutor с заданным размером основного пула. |
ScheduledThreadPoolExecutor |
Создаёт новый ScheduledThreadPoolExecutor с заданными начальными параметрами. |
ScheduledThreadPoolExecutor |
Создаёт новый ScheduledThreadPoolExecutor с заданными начальными параметрами. |
ScheduledThreadPoolExecutor |
Создаёт новый ScheduledThreadPoolExecutor с заданными начальными параметрами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
protected <V> RunnableScheduledFuture |
decorateTask |
Изменяет или заменяет задачу, используемую для выполнения Runnable. |
protected <V> RunnableScheduledFuture |
decorateTask |
Изменяет или заменяет задачу, используемую для выполнения Callable. |
void |
execute |
Выполняет command без обязательной задержки. |
boolean |
getContinueExistingPeriodicTasksAfterShutdownPolicy() |
Возвращает политику, определяющую, следует ли продолжать выполнение существующих периодических задач после того, как для этого исполнителя был вызван shutdown. |
boolean |
getExecuteExistingDelayedTasksAfterShutdownPolicy() |
Возвращает политику, определяющую, следует ли выполнять существующие отложенные задачи после того, как для этого исполнителя был вызван shutdown. |
BlockingQueue |
getQueue() |
Возвращает очередь задач, используемую этим исполнителем. |
boolean |
getRemoveOnCancelPolicy() |
Возвращает политику, определяющую, следует ли немедленно удалять отменённые задачи из очереди работ при отмене. |
ScheduledFuture |
schedule |
Отправляет однократную задачу, которая становится доступной после заданной задержки. |
<V> ScheduledFuture |
schedule |
Отправляет однократную задачу с возвращаемым значением, которая становится доступной после заданной задержки. |
ScheduledFuture |
scheduleAtFixedRate |
Отправляет периодическое действие, которое впервые становится доступным после заданной начальной задержки, а затем — с заданным периодом; то есть выполнения начнутся после initialDelay, затем после initialDelay + period, затем после initialDelay + 2 * period и так далее. |
ScheduledFuture |
scheduleWithFixedDelay |
Отправляет периодическое действие, которое впервые становится доступным после заданной начальной задержки, а затем — после заданной задержки между завершением одного выполнения и началом следующего. |
void |
setContinueExistingPeriodicTasksAfterShutdownPolicy |
Устанавливает политику, определяющую, следует ли продолжать выполнение существующих периодических задач после того, как для этого исполнителя был вызван shutdown. |
void |
setExecuteExistingDelayedTasksAfterShutdownPolicy |
Устанавливает политику, определяющую, следует ли выполнять существующие отложенные задачи после того, как для этого исполнителя был вызван shutdown. |
void |
setRemoveOnCancelPolicy |
Устанавливает политику, определяющую, следует ли немедленно удалять отменённые задачи из очереди работ при отмене. |
void |
shutdown() |
Инициирует упорядоченное завершение работы, при котором ранее отправленные задачи выполняются, но новые задачи не принимаются. |
List |
shutdownNow() |
Пытается остановить все активно выполняющиеся задачи, прекращает обработку ожидающих задач и возвращает список задач, ожидавших выполнения. |
Future |
submit |
Отправляет задачу Runnable на выполнение и возвращает Future, представляющий эту задачу. |
<T> Future |
submit |
Отправляет задачу Runnable на выполнение и возвращает Future, представляющий эту задачу. |
<T> Future |
submit |
Отправляет задачу с возвращаемым значением на выполнение и возвращает Future, представляющий ожидающий результат этой задачи. |
Методы, объявленные в классе ThreadPoolExecutor
afterExecute, allowCoreThreadTimeOut, allowsCoreThreadTimeOut, awaitTermination, beforeExecute, finalize, getActiveCount, getCompletedTaskCount, getCorePoolSize, getKeepAliveTime, getLargestPoolSize, getMaximumPoolSize, getPoolSize, getRejectedExecutionHandler, getTaskCount, getThreadFactory, isShutdown, isTerminated, isTerminating, prestartAllCoreThreads, prestartCoreThread, purge, remove, setCorePoolSize, setKeepAliveTime, setMaximumPoolSize, setRejectedExecutionHandler, setThreadFactory, terminated, toString
Методы, объявленные в классе AbstractExecutorService
invokeAll, invokeAll, invokeAny, invokeAny, newTaskFor, newTaskFor
Методы, объявленные в классе Object
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
Методы, объявленные в интерфейсе ExecutorService
awaitTermination, close, invokeAll, invokeAll, invokeAny, invokeAny, isShutdown, isTerminated
Подробное описание конструкторов
ScheduledThreadPoolExecutor
public ScheduledThreadPoolExecutor(int corePoolSize)
ScheduledThreadPoolExecutor с указанным размером основного пула.- Параметры:
-
corePoolSize— количество потоков, которые нужно сохранять в пуле, даже если они простаивают, если только не установленоallowCoreThreadTimeOut - Исключения:
-
IllegalArgumentException— еслиcorePoolSize < 0
ScheduledThreadPoolExecutor
public ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory)
ScheduledThreadPoolExecutor с указанными начальными параметрами.- Параметры:
-
corePoolSize— количество потоков, которые нужно сохранять в пуле, даже если они простаивают, если только не установленоallowCoreThreadTimeOut -
threadFactory— фабрика, используемая при создании исполнителем нового потока - Исключения:
-
IllegalArgumentException— еслиcorePoolSize < 0 -
NullPointerException— еслиthreadFactoryравно null
ScheduledThreadPoolExecutor
public ScheduledThreadPoolExecutor(int corePoolSize, RejectedExecutionHandler handler)
ScheduledThreadPoolExecutor с указанными начальными параметрами.- Параметры:
-
corePoolSize— количество потоков, которые нужно сохранять в пуле, даже если они простаивают, если только не установленоallowCoreThreadTimeOut -
handler— обработчик, используемый, когда выполнение блокируется из-за достижения предельного количества потоков и емкости очереди - Исключения:
-
IllegalArgumentException— еслиcorePoolSize < 0 -
NullPointerException— еслиhandlerравно null
ScheduledThreadPoolExecutor
public ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory, RejectedExecutionHandler handler)
ScheduledThreadPoolExecutor с указанными начальными параметрами.- Параметры:
-
corePoolSize— количество потоков, которые нужно сохранять в пуле, даже если они простаивают, если только не установленоallowCoreThreadTimeOut -
threadFactory— фабрика, используемая при создании исполнителем нового потока -
handler— обработчик, используемый, когда выполнение блокируется из-за достижения предельного количества потоков и емкости очереди - Исключения:
-
IllegalArgumentException— еслиcorePoolSize < 0 -
NullPointerException— еслиthreadFactoryилиhandlerравно null
Подробное описание методов
decorateTask
protected <V> RunnableScheduledFuture<V> decorateTask(Runnable runnable, RunnableScheduledFuture<V> task)
- Параметры типа:
V— тип результата задачи- Параметры:
-
runnable— отправленный Runnable -
task— задача, созданная для выполнения runnable - Возвращает:
- задачу, которая может выполнить runnable
- С версии:
- 1.6
decorateTask
protected <V> RunnableScheduledFuture<V> decorateTask(Callable<V> callable, RunnableScheduledFuture<V> task)
- Параметры типа:
V— тип результата задачи- Параметры:
-
callable— отправленный Callable -
task— задача, созданная для выполнения callable - Возвращает:
- задачу, которая может выполнить callable
- С версии:
- 1.6
schedule
public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
ScheduledExecutorService- Определено в:
-
scheduleв интерфейсеScheduledExecutorService - Параметры:
-
command— задача для выполнения -
delay— время задержки выполнения относительно текущего момента -
unit— единица измерения параметра задержки - Возвращает:
- ScheduledFuture, представляющий ожидающее завершения задачи и метод
get()которого вернетnullпосле завершения - Исключения:
-
RejectedExecutionException— если выполнение задачи невозможно запланировать -
NullPointerException— если command или unit равен null
schedule
public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
ScheduledExecutorService- Определено в:
-
scheduleв интерфейсеScheduledExecutorService - Параметры типа:
V— тип результата callable- Параметры:
-
callable— функция для выполнения -
delay— время задержки выполнения относительно текущего момента -
unit— единица измерения параметра задержки - Возвращает:
- ScheduledFuture, который можно использовать для получения результата или отмены задачи
- Исключения:
-
RejectedExecutionException— если выполнение задачи невозможно запланировать -
NullPointerException— если callable или unit равен null
scheduleAtFixedRate
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
initialDelay, затем через initialDelay + period, затем через initialDelay + 2 * period и так далее. Последовательность выполнений задачи продолжается бесконечно, пока не произойдет одно из следующих исключительных завершений:
- Задача явно отменена с помощью возвращенного объекта future.
- Вызывается метод
shutdown(), и политика продолжения после завершения работы не установлена в true, либо вызывается методshutdownNow(); это также приводит к отмене задачи. - При выполнении задачи возникает исключение. В этом случае вызов
getу возвращенного объекта future приведет к выбросуExecutionException, причиной которого будет это исключение.
isDone() у возвращенного объекта future вернут true. Если выполнение этой задачи длится дольше, чем ее период, последующие выполнения могут начаться с опозданием, но не будут выполняться одновременно.
- Определено в:
-
scheduleAtFixedRateв интерфейсеScheduledExecutorService - Параметры:
-
command— задача для выполнения -
initialDelay— время задержки до первого выполнения -
period— период между последовательными выполнениями -
unit— единица измерения параметров initialDelay и period - Возвращает:
- ScheduledFuture, представляющий ожидающее завершения выполнение серии повторяющихся задач. Метод
get()объекта future никогда не завершится нормально и выбросит исключение при отмене задачи или ее ненормальном завершении. - Исключения:
-
RejectedExecutionException— если выполнение задачи невозможно запланировать -
NullPointerException— если command или unit равен null -
IllegalArgumentException— если period меньше или равен нулю
scheduleWithFixedDelay
public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
Последовательность выполнений задачи продолжается бесконечно, пока не произойдет одно из следующих исключительных завершений:
- Задача явно отменена с помощью возвращенного объекта future.
- Вызывается метод
shutdown(), и политика продолжения после завершения работы не установлена в true, либо вызывается методshutdownNow(); это также приводит к отмене задачи. - При выполнении задачи возникает исключение. В этом случае вызов
getу возвращенного объекта future приведет к выбросуExecutionException, причиной которого будет это исключение.
isDone() у возвращенного объекта future вернут true.- Определено в:
-
scheduleWithFixedDelayв интерфейсеScheduledExecutorService - Параметры:
-
command— задача для выполнения -
initialDelay— время задержки до первого выполнения -
delay— задержка между завершением одного выполнения и началом следующего -
unit— единица измерения параметров initialDelay и delay - Возвращает:
- ScheduledFuture, представляющий ожидающее завершения выполнение серии повторяющихся задач. Метод
get()объекта future никогда не завершится нормально и выбросит исключение при отмене задачи или ее ненормальном завершении. - Исключения:
-
RejectedExecutionException— если выполнение задачи невозможно запланировать -
NullPointerException— если command или unit равен null -
IllegalArgumentException— если delay меньше или равна нулю
execute
public void execute(Runnable command)
command без задержки. Это эквивалентно вызову schedule(command, 0, anyUnit). Обратите внимание: при просмотре очереди и списка, возвращаемого методом shutdownNow, будут доступны объекты ScheduledFuture с нулевой задержкой, а не сам command. Следствием использования объектов ScheduledFuture является то, что метод afterExecute всегда вызывается со вторым аргументом Throwable, равным null, даже если command завершился аварийно. Вместо этого объект Throwable, выброшенный такой задачей, можно получить с помощью метода Future.get().
- Определено в:
-
executeв интерфейсеExecutor - Переопределяет:
-
executeв классеThreadPoolExecutor - Параметры:
-
command— задача для выполнения - Исключения:
-
RejectedExecutionException— по усмотрениюRejectedExecutionHandler, если задачу нельзя принять к выполнению, поскольку работа исполнителя была завершена -
NullPointerException— еслиcommandравно null
submit
public Future<?> submit(Runnable task)
ExecutorServiceget объекта Future вернет null при успешном завершении.- Определено в:
-
submitв интерфейсеExecutorService - Переопределяет:
-
submitв классеAbstractExecutorService - Параметры:
-
task— отправляемая задача - Возвращает:
- Future, представляющий ожидающее завершения задачи
- Исключения:
-
RejectedExecutionException— если выполнение задачи невозможно запланировать -
NullPointerException— если задача равна null
submit
public <T> Future<T> submit(Runnable task, T result)
ExecutorServiceget объекта Future вернет указанный результат при успешном завершении.- Определено в:
-
submitв интерфейсеExecutorService - Переопределяет:
-
submitв классеAbstractExecutorService - Параметры типа:
T— тип результата- Параметры:
-
task— отправляемая задача -
result— возвращаемый результат - Возвращает:
- Future, представляющий ожидающее завершения задачи
- Исключения:
-
RejectedExecutionException— если выполнение задачи невозможно запланировать -
NullPointerException— если задача равна null
submit
public <T> Future<T> submit(Callable<T> task)
ExecutorServiceget объекта Future вернет результат задачи при успешном завершении. Если вы хотите сразу же заблокировать выполнение в ожидании задачи, можно использовать конструкции вида result = exec.submit(aCallable).get();
Примечание: класс Executors содержит набор методов для преобразования некоторых распространенных объектов, подобных замыканиям, например PrivilegedAction, в форму Callable, чтобы их можно было отправить на выполнение.
- Определено в:
-
submitв интерфейсеExecutorService - Переопределяет:
-
submitв классеAbstractExecutorService - Параметры типа:
T— тип результата задачи- Параметры:
-
task— отправляемая задача - Возвращает:
- Future, представляющий ожидающее завершения задачи
- Исключения:
-
RejectedExecutionException— если выполнение задачи невозможно запланировать -
NullPointerException— если задача равна null
setContinueExistingPeriodicTasksAfterShutdownPolicy
public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value)
shutdown. В этом случае выполнение продолжится до shutdownNow или до тех пор, пока политика не будет установлена в false после завершения работы. По умолчанию это значение равно false.- Параметры:
-
value— еслиtrue, продолжать после завершения работы, иначе не продолжать - См. также:
getContinueExistingPeriodicTasksAfterShutdownPolicy
public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()
shutdown. В этом случае выполнение продолжится до shutdownNow или до тех пор, пока политика не будет установлена в false после завершения работы. По умолчанию это значение равно false.- Возвращает:
-
true, если выполнение будет продолжено после завершения работы - См. также:
setExecuteExistingDelayedTasksAfterShutdownPolicy
public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value)
shutdown. В этом случае такие задачи завершатся только при shutdownNow или после установки политики в false после завершения работы. По умолчанию это значение равно true.- Параметры:
-
value— еслиtrue, выполнять после завершения работы, иначе не выполнять - См. также:
getExecuteExistingDelayedTasksAfterShutdownPolicy
public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()
shutdown. В этом случае такие задачи завершатся только при shutdownNow или после установки политики в false после завершения работы. По умолчанию это значение равно true.- Возвращает:
-
true, если задачи будут выполняться после завершения работы - См. также:
setRemoveOnCancelPolicy
public void setRemoveOnCancelPolicy(boolean value)
false.- Параметры:
-
value— еслиtrue, удалять при отмене, иначе не удалять - С версии:
- 1.7
- См. также:
getRemoveOnCancelPolicy
public boolean getRemoveOnCancelPolicy()
false.- Возвращает:
-
true, если отмененные задачи немедленно удаляются из очереди - С версии:
- 1.7
- См. также:
shutdown
public void shutdown()
Этот метод не ожидает завершения выполнения ранее отправленных задач. Для этого используйте awaitTermination.
Если параметр ExecuteExistingDelayedTasksAfterShutdownPolicy установлен в false, существующие задачи с задержкой, срок выполнения которых еще не наступил, отменяются. Если параметр
ContinueExistingPeriodicTasksAfterShutdownPolicy не установлен в true, будущие выполнения существующих периодических задач будут отменены.
- Определено в:
-
shutdownв интерфейсеExecutorService - Переопределяет:
-
shutdownв классеThreadPoolExecutor
shutdownNow
public List<Runnable> shutdownNow()
Этот метод не ожидает завершения активно выполняющихся задач. Для этого используйте awaitTermination.
Гарантии, выходящие за рамки максимально возможных попыток остановить обработку активно выполняющихся задач, отсутствуют. Эта реализация прерывает задачи с помощью Thread.interrupt(); задачи, не реагирующие на прерывания, могут никогда не завершиться.
- Определено в:
-
shutdownNowв интерфейсеExecutorService - Переопределяет:
-
shutdownNowв классеThreadPoolExecutor - Возвращает:
- список задач, выполнение которых так и не началось. Каждый элемент этого списка является
ScheduledFuture. Для задач, отправленных одним из методовschedule, элемент будет идентичен возвращенномуScheduledFuture. Для задач, отправленных с помощьюexecute, элементом будетScheduledFutureс нулевой задержкой.
getQueue
public BlockingQueue<Runnable> getQueue()
Каждый элемент этой очереди является ScheduledFuture. Для задач, отправленных одним из методов schedule, элемент будет идентичен возвращенному ScheduledFuture. Для задач, отправленных с помощью execute, элементом будет ScheduledFuture с нулевой задержкой.
Не гарантируется, что при итерации по этой очереди задачи будут перебраны в порядке их выполнения.
- Переопределяет:
-
getQueueв классеThreadPoolExecutor - Возвращает:
- очередь задач
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/ScheduledThreadPoolExecutor.html