Класс 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 - Параметры:
-
callable- функция для выполнения -
delay- время задержки выполнения от текущего момента -
unit- единица измерения времени для параметра задержки - Возвращает:
- ScheduledFuture, который можно использовать для извлечения результата или отмены
- Исключения:
-
RejectedExecutionException- если задачу нельзя запланировать для выполнения -
NullPointerException- если callable или единица измерения равны null
scheduleAtFixedRate
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
initialDelay, затем initialDelay + period, затем initialDelay + 2 * period, и так далее. Последовательность выполнений задачи продолжается неопределённо, пока не произойдёт одно из следующих исключительных завершений:
- Задача явным образом отменяется через возвращаемое будущее.
- Вызван метод
shutdown()и политика продолжения после выключения не установлена в true, или вызван методshutdownNow(), что также приводит к отмене задачи. - Выполнение задачи вызывает исключение. В этом случае вызов
getна возвращаемом будущем выброситExecutionException, содержащий исключение в качестве причины.
isDone() на возвращаемом будущем вернут true. Если любое выполнение этой задачи занимает больше времени, чем её период, последующие выполнения могут начаться с опозданием, но не будут выполняться одновременно.
- Определено в:
-
scheduleAtFixedRateв интерфейсеScheduledExecutorService - Параметры:
-
command- задача для выполнения -
initialDelay- время задержки первого выполнения -
period- период между последовательными выполнениями -
unit- единица измерения времени для параметров initialDelay и period - Возвращает:
- ScheduledFuture, представляющий ожидаемое завершение серии повторяющихся задач. Метод
get()будущего никогда не вернётся нормально и выбросит исключение при отмене задачи или аномальном завершении выполнения задачи. - Исключения:
-
RejectedExecutionException- если задачу нельзя запланировать для выполнения -
NullPointerException- если команда или единица измерения равны null -
IllegalArgumentException- если период меньше или равен нулю
scheduleWithFixedDelay
public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
Последовательность выполнения задач продолжается неопределенно, пока не произойдёт одно из следующих исключительных завершений:
- Задача явным образом отменена через возвращаемый объект future.
- Вызывается метод
shutdown()и политика продолжения после завершения не установлена в значение true, или вызывается методshutdownNow(); это также приведёт к отмене задачи. - При выполнении задачи возникает исключение. В этом случае вызов
getна возвращаемом объекте future вызоветExecutionException, содержащий исключение в качестве причины.
isDone() на возвращаемом объекте future вернут true.- Specified by:
-
scheduleWithFixedDelayв интерфейсеScheduledExecutorService - Parameters:
-
command- задача для выполнения -
initialDelay- время задержки первого выполнения -
delay- задержка между завершением одного выполнения и началом следующего -
unit- единица измерения времени для параметров initialDelay и delay - Returns:
- ScheduledFuture, представляющий ожидаемое завершение серии повторяющихся задач. Метод
get()объекта future никогда не вернёт значение нормально и выбросит исключение при отмене задачи или аномальном завершении выполнения задачи. - Throws:
-
RejectedExecutionException- если задача не может быть запланирована для выполнения -
NullPointerException- если команда или единица измерения равны null -
IllegalArgumentException- если задержка меньше или равна нулю
execute
public void execute(Runnable command)
command с нулевой задержкой. Это имеет тот же эффект, что и schedule(command, 0, anyUnit). Обратите внимание, что проверки очереди и списка, возвращаемого shutdownNow будут обращаться к задаче с нулевой задержкой ScheduledFuture, а не к самому command. Следствием использования объектов ScheduledFuture является то, что afterExecute всегда вызывается с null во втором аргументе 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:
Установить политику удаления при отмене
public void setRemoveOnCancelPolicy(boolean value)
false.- Параметры:
-
value- еслиtrue, удалять при отмене, иначе — нет - С:
- 1.7
- См. также:
Получить политику удаления при отмене
public boolean getRemoveOnCancelPolicy()
false.- Возвращает:
-
trueесли отменённые задачи немедленно удаляются из очереди - С:
- 1.7
- См. также:
shutdown
public void shutdown()
Этот метод не ожидает завершения выполнения ранее отправленных задач. Используйте awaitTermination для этого.
Если ExecuteExistingDelayedTasksAfterShutdownPolicy была установлена false, существующие отложенные задачи, чьи задержки ещё не истекли, отменяются. И, если
ContinueExistingPeriodicTasksAfterShutdownPolicy не была установлена true, будущие выполнения существующих периодических задач будут отменены.
- Определено в:
-
shutdownв интерфейсеExecutorService - Переопределяет:
-
shutdownв классеThreadPoolExecutor - Исключения:
-
SecurityException- если менеджер безопасности существует и остановка этого ExecutorService может манипулировать потоками, которые вызывающему объекту запрещено изменять, потому что у него нетRuntimePermission("modifyThread"), или методcheckAccessменеджера безопасности отказывается в доступе.
shutdownNow
public List<Runnable> shutdownNow()
Этот метод не ожидает завершения активно выполняемых задач. Используйте awaitTermination для этого.
Гарантий, кроме попыток остановить обработку активно выполняемых задач, нет. Эта реализация прерывает задачи с помощью Thread.interrupt(); любая задача, которая не реагирует на прерывания, может никогда не завершиться.
- Определено в:
-
shutdownNowв интерфейсеExecutorService - Переопределяет:
-
shutdownNowв классеThreadPoolExecutor - Возвращает:
- список задач, которые так и не начали выполнение. Каждый элемент этого списка —
ScheduledFuture. Для задач, отправленных с помощью одного изscheduleметодов, элемент будет идентичен возвращённомуScheduledFuture. Для задач, отправленных с помощьюexecute, элемент будет задачей с нулевой задержкойScheduledFuture. - Исключения:
-
SecurityException- если менеджер безопасности существует и остановка этого ExecutorService может манипулировать потоками, которые вызывающему объекту запрещено изменять, потому что у него нетRuntimePermission("modifyThread"), или методcheckAccessменеджера безопасности отказывается в доступе.
getQueue
public BlockingQueue<Runnable> getQueue()
Каждый элемент этой очереди — ScheduledFuture. Для задач, отправленных с помощью одного из schedule методов, элемент будет идентичен возвращённому ScheduledFuture. Для задач, отправленных с помощью execute, элемент будет задачей с нулевой задержкой ScheduledFuture.
Итерация по этой очереди не гарантирует прохождения задач в том порядке, в котором они будут выполняться.
- Переопределяет:
-
getQueueв классеThreadPoolExecutor - Возвращает:
- очередь задач
© 1993, 2023, 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/21/docs/api/java.base/java/util/concurrent/ScheduledThreadPoolExecutor.html