Класс 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
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в классе java.util.concurrent.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, представляющую ожидаемые результаты задачи. |
Методы, объявленные в классе java.util.concurrent.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
Методы, объявленные в классе java.util.concurrent.AbstractExecutorService
invokeAll, invokeAll, invokeAny, invokeAny, newTaskFor, newTaskFor
Методы, объявленные в классе java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
Методы, объявленные в интерфейсе java.util.concurrent.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- если команда или единица измерения времени равны null
schedule
public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
ScheduledExecutorService- Определено в:
-
scheduleв интерфейсеScheduledExecutorService - Параметры типа:
V- тип результата вызываемого объекта- Параметры:
-
callable- функция для выполнения -
delay- время задержки выполнения с текущего момента -
unit- единица измерения времени для параметра задержки - Возвращает:
- ScheduledFuture, который может использоваться для извлечения результата или отмены
- Исключения:
-
RejectedExecutionException- если задачу нельзя запланировать на выполнение -
NullPointerException- если вызываемый объект или единица измерения времени равны 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- единица измерения времени для параметров начальной задержки и периода - Возвращает:
- ScheduledFuture, представляющий ожидаемое завершение серии повторяющихся задач. Метод
get()объекта future никогда не вернёт значение обычным способом и вызовет исключение при отмене задачи или аномальном завершении выполнения задачи. - Исключения:
-
RejectedExecutionException- если задачу нельзя запланировать на выполнение -
NullPointerException- если команда или единица измерения времени равны null -
IllegalArgumentException- если период меньше или равен нулю
scheduleWithFixedDelay
public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
Последовательность выполнения задач продолжается неопределенно до тех пор, пока не произойдёт одно из следующих исключительных завершений:
- Задача явным образом отменяется через возвращённую будущую задачу.
- Вызывается метод
shutdown(), и политика о продолжении после завершения не установлена в значение true, или вызывается методshutdownNow(); также это приведёт к отмене задачи. - При выполнении задачи возникает исключение. В этом случае вызов
getна возвращённой будущей задаче выброситExecutionException, содержащий исключение в качестве причины.
isDone() на возвращённой будущей задаче вернут true.- Specified by:
-
scheduleWithFixedDelayв интерфейсеScheduledExecutorService - Parameters:
-
command- задача для выполнения -
initialDelay- время задержки первого выполнения -
delay- задержка между завершением одного выполнения и началом следующего -
unit- единица измерения времени для параметров initialDelay и delay - Returns:
- ScheduledFuture, представляющий собой ожидаемое завершение серии повторяющихся задач. Метод
get()будущего никогда не вернёт значение нормально и выбросит исключение при отмене задачи или аномальном завершении выполнения задачи. - Throws:
-
RejectedExecutionException- если задачу нельзя запланировать на выполнение -
NullPointerException- если команда или единица равны null -
IllegalArgumentException- если задержка меньше или равна нулю
execute
public void execute(Runnable command)
command с нулевой необходимой задержкой. Это имеет эквивалентный эффект schedule(command, 0, anyUnit). Обратите внимание, что проверки очереди и списка, возвращённого shutdownNow, будут обращаться к ScheduledFuture с задержкой в ноль, а не к самому command. Следствием использования объектов ScheduledFuture является то, что afterExecute всегда вызывается с нулевым вторым аргументом Throwable, даже если command завершился абортированно. Вместо этого, Throwable, выброшенный такой задачей, может быть получен через Future.get().
- Specified by:
-
executeв интерфейсеExecutor - Overrides:
-
executeв классеThreadPoolExecutor - Parameters:
-
command- задача для выполнения - Throws:
-
RejectedExecutionException- по усмотрениюRejectedExecutionHandler, если задача не может быть принята для выполнения, поскольку исполняющий поток был закрыт -
NullPointerException- еслиcommandравно null
submit
public Future<?> submit(Runnable task)
ExecutorServiceget Future вернёт null при успешном завершении.- Specified by:
-
submitв интерфейсеExecutorService - Overrides:
-
submitв классеAbstractExecutorService - Parameters:
-
task- задача для отправки - Returns:
- Future, представляющая ожидаемое завершение задачи
- Throws:
-
RejectedExecutionException- если задачу нельзя запланировать на выполнение -
NullPointerException- если задача равна null
submit
public <T> Future<T> submit(Runnable task, T result)
ExecutorServiceget Future вернёт заданное значение результата при успешном завершении.- Specified by:
-
submitв интерфейсеExecutorService - Overrides:
-
submitв классеAbstractExecutorService - Type Parameters:
T- тип результата- Parameters:
-
task- задача для отправки -
result- возвращаемое значение результата - Returns:
- Future, представляющая ожидаемое завершение задачи
- Throws:
-
RejectedExecutionException- если задачу нельзя запланировать на выполнение -
NullPointerException- если задача равна null
submit
public <T> Future<T> submit(Callable<T> task)
ExecutorServiceget Future вернёт результат задачи при успешном завершении. Если вы хотите немедленно заблокировать ожидание выполнения задачи, вы можете использовать конструкции вида result = exec.submit(aCallable).get();
Примечание: Класс Executors включает набор методов, которые могут преобразовать некоторые другие распространённые объекты, похожие на замыкания, например, PrivilegedAction в форму Callable, чтобы их можно было отправить.
- Specified by:
-
submitв интерфейсеExecutorService - Overrides:
-
submitв классеAbstractExecutorService - Type Parameters:
T- тип результата задачи- Parameters:
-
task- задача для отправки - Returns:
- Future, представляющая ожидаемое завершение задачи
- Throws:
-
RejectedExecutionException- если задачу нельзя запланировать на выполнение -
NullPointerException- если задача равна null
setContinueExistingPeriodicTasksAfterShutdownPolicy
public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value)
shutdownNow или политика будет установлена в значение false при уже завершении работы. Это значение по умолчанию false.- Parameters:
-
value- еслиtrue, продолжать после завершения, иначе нет - See Also:
getContinueExistingPeriodicTasksAfterShutdownPolicy
public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()
shutdownNow или политика будет установлена в значение false при уже завершении работы. Это значение по умолчанию false.- Returns:
-
trueесли продолжать после завершения - See Also:
setExecuteExistingDelayedTasksAfterShutdownPolicy
public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value)
shutdownNow или после изменения политики в значение false при уже завершённой работе. Это значение по умолчанию true.- Parameters:
-
value- еслиtrue, выполнить после завершения, иначе нет - See Also:
getExecuteExistingDelayedTasksAfterShutdownPolicy
public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()
shutdownNow или после изменения политики в значение false при уже завершённой работе. Это значение по умолчанию true.- Returns:
-
trueесли выполнить после завершения - See Also:
setRemoveOnCancelPolicy
public void setRemoveOnCancelPolicy(boolean value)
false.- Parameters:
-
value- еслиtrue, удалять при отмене, иначе — нет - Since:
- 1.7
- See Also:
getRemoveOnCancelPolicy
public boolean getRemoveOnCancelPolicy()
false.- Returns:
-
true, если отменённые задачи немедленно удаляются из очереди - Since:
- 1.7
- See Also:
shutdown
public void shutdown()
Этот метод не ожидает завершения выполнения ранее отправленных задач. Используйте awaitTermination для этого.
Если ExecuteExistingDelayedTasksAfterShutdownPolicy было установлено false, существующие отложенные задачи, задержка которых ещё не истекла, отменяются. И, если
ContinueExistingPeriodicTasksAfterShutdownPolicy не было установлено true, будущие выполнения существующих периодических задач будут отменены.
- Specified by:
-
shutdownin interfaceExecutorService - Overrides:
-
shutdownin classThreadPoolExecutor
shutdownNow
public List<Runnable> shutdownNow()
Этот метод не ожидает завершения активно выполняющихся задач. Используйте awaitTermination для этого.
Нет гарантий, кроме наилучших попыток остановить обработку активно выполняющихся задач. Эта реализация прерывает задачи через Thread.interrupt(); любая задача, которая не реагирует на прерывания, может никогда не завершиться.
- Specified by:
-
shutdownNowin interfaceExecutorService - Overrides:
-
shutdownNowin classThreadPoolExecutor - Returns:
- список задач, которые никогда не начинали выполнение. Каждый элемент этого списка является
ScheduledFuture. Для задач, отправленных одним изscheduleметодов, элемент будет идентичен возвращённомуScheduledFuture. Для задач, отправленных с помощьюexecute, элемент будетScheduledFutureс нулевой задержкой.
getQueue
public BlockingQueue<Runnable> getQueue()
Каждый элемент этой очереди — ScheduledFuture. Для задач, отправленных одним из schedule методов, элемент будет идентичен возвращённому ScheduledFuture. Для задач, отправленных с помощью execute, элемент будет ScheduledFuture с нулевой задержкой.
Итерация по этой очереди не гарантирует прохождение задач в порядке, в котором они будут выполняться.
- Overrides:
-
getQueuein classThreadPoolExecutor - Returns:
- очередь задач
© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/ScheduledThreadPoolExecutor.html