Класс ScheduledThreadPoolExecutor
- Все реализованные интерфейсы:
-
Executor,ExecutorService,ScheduledExecutorService
public class ScheduledThreadPoolExecutor extends ThreadPoolExecutor implements ScheduledExecutorService
ThreadPoolExecutor that can additionally schedule commands to run after a given delay, or to execute periodically. This class is preferable to Timer when multiple worker threads are needed, or when the additional flexibility or capabilities of ThreadPoolExecutor (which this class extends) are required. Delayed tasks execute no sooner than they are enabled, but without any real-time guarantees about when, after they are enabled, they will commence. Tasks scheduled for exactly the same execution time are enabled in first-in-first-out (FIFO) order of submission.
When a submitted task is cancelled before it is run, execution is suppressed. By default, such a cancelled task is not automatically removed from the work queue until its delay elapses. While this enables further inspection and monitoring, it may also cause unbounded retention of cancelled tasks. To avoid this, use setRemoveOnCancelPolicy(boolean) to cause tasks to be immediately removed from the work queue at time of cancellation.
Successive executions of a periodic task scheduled via scheduleAtFixedRate or scheduleWithFixedDelay do not overlap. While different executions may be performed by different threads, the effects of prior executions happen-before those of subsequent ones.
While this class inherits from ThreadPoolExecutor, a few of the inherited tuning methods are not useful for it. In particular, because it acts as a fixed-sized pool using corePoolSize threads and an unbounded queue, adjustments to maximumPoolSize have no useful effect. Additionally, it is almost never a good idea to set corePoolSize to zero or use allowCoreThreadTimeOut because this may leave the pool without threads to handle tasks once they become eligible to run.
As with ThreadPoolExecutor, if not otherwise specified, this class uses Executors.defaultThreadFactory() as the default thread factory, and ThreadPoolExecutor.AbortPolicy as the default rejected execution handler.
Примечания к расширению: Этот класс переопределяет методы 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.
}
- Since:
- 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<V> |
decorateTask |
Изменяет или заменяет задачу, используемую для выполнения исполняемого кода. |
protected <V> RunnableScheduledFuture<V> |
decorateTask |
Изменяет или заменяет задачу, используемую для выполнения вызываемого объекта. |
void |
execute |
Выполняет command без задержки. |
boolean |
getContinueExistingPeriodicTasksAfterShutdownPolicy() |
Получает политику относительно продолжения выполнения существующих периодических задач, даже когда этот исполняющий механизм был shutdown. |
boolean |
getExecuteExistingDelayedTasksAfterShutdownPolicy() |
Получает политику относительно выполнения существующих задач с задержкой, даже когда этот исполняющий механизм был shutdown. |
BlockingQueue<Runnable> |
getQueue() |
Возвращает очередь задач, используемую этим исполняющим механизмом. |
boolean |
getRemoveOnCancelPolicy() |
Получает политику относительно того, должны ли отменённые задачи немедленно удаляться из очереди задач во время отмены. |
ScheduledFuture<?> |
schedule |
Отправляет однократную задачу, которая становится доступной после заданной задержки. |
<V> ScheduledFuture<V> |
schedule |
Отправляет возвращающую значение однократную задачу, которая становится доступной после заданной задержки. |
ScheduledFuture<?> |
scheduleAtFixedRate |
Отправляет периодическое действие, которое становится доступным сначала после заданной начальной задержки, а затем с заданным периодом; то есть, выполнения начнутся после initialDelay, затем initialDelay + period, затем initialDelay + 2 * period, и так далее. |
ScheduledFuture<?> |
scheduleWithFixedDelay |
Отправляет периодическое действие, которое становится доступным сначала после заданной начальной задержки, а затем с заданной задержкой между завершением одного выполнения и началом следующего. |
void |
setContinueExistingPeriodicTasksAfterShutdownPolicy |
Устанавливает политику по продолжению выполнения существующих периодических задач, даже когда этот исполняющий механизм был shutdown. |
void |
setExecuteExistingDelayedTasksAfterShutdownPolicy |
Устанавливает политику по выполнению существующих задач с задержкой, даже когда этот исполняющий механизм был shutdown. |
void |
setRemoveOnCancelPolicy |
Устанавливает политику по немедленному удалению отменённых задач из очереди задач при отмене. |
void |
shutdown() |
Инициирует упорядоченное завершение, в котором ранее отправленные задачи выполняются, но новые задачи не будут приниматься. |
List<Runnable> |
shutdownNow() |
Пытается остановить все активно выполняющиеся задачи, приостанавливает обработку ожидающих задач и возвращает список задач, которые ожидали выполнения. |
Future<?> |
submit |
Отправляет задачу Runnable для выполнения и возвращает Future, представляющую эту задачу. |
<T> Future<T> |
submit |
Отправляет задачу Runnable для выполнения и возвращает Future, представляющую эту задачу. |
<T> Future<T> |
submit |
Отправляет задачу, возвращающую значение, для выполнения и возвращает Future, представляющую ожидаемые результаты задачи. |
Methods declared in class 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
Methods declared in class java.util.concurrent.AbstractExecutorService
invokeAll, invokeAll, invokeAny, invokeAny, newTaskFor, newTaskFor
Методы, объявленные в интерфейсе java.util.concurrent.ExecutorService
awaitTermination, 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
планировать
public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
ScheduledExecutorService- Определено в:
-
scheduleв интерфейсеScheduledExecutorService - Параметры:
-
command- задача для выполнения -
delay- время задержки выполнения с момента вызова -
unit- единица измерения времени задержки - Возвращает:
- ScheduledFuture, представляющий собой ожидающее завершение задачи, и метод
get()которого вернетnullпосле завершения - Исключения:
-
RejectedExecutionException- если задачу нельзя запланировать на выполнение -
NullPointerException- если команда или единица измерения равны null
планировать
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, и так далее.
Последовательность выполнений задач продолжается неопределенно до тех пор, пока не произойдет одно из следующих исключительных завершений:
- Задача явным образом отменяется через возвращённый фьючерс..
- Вызывается метод
shutdown(), и политика продолжения после завершения не установлена в значение true, или вызывается методshutdownNow(); что также приводит к отмене задачи. - Выполнение задачи вызывает исключение. В этом случае вызов
getна возвращённом фьючерсе выброситExecutionException, содержащий исключение как причину.
isDone() на возвращённом фьючерсе вернут true.
Если любое выполнение этой задачи занимает больше времени, чем её период, то последующие выполнения могут начаться с опозданием, но не будут выполняться одновременно.
- Specified by:
-
scheduleAtFixedRateв интерфейсеScheduledExecutorService - Parameters:
-
command- задача для выполнения -
initialDelay- время задержки первого выполнения -
period- период между последующими выполнениями -
unit- единица измерения времени для параметров initialDelay и period - Returns:
- ScheduledFuture, представляющий ожидающее завершение серии повторяющихся задач. Метод
get()фьючерса никогда не вернёт значение нормально и выбросит исключение при отмене задачи или аномальном завершении выполнения задачи. - Throws:
-
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 всегда вызывается с null вторым Throwable аргументом, даже если задача 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 вернёт заданный результат при успешном выполнении.- Указано в:
-
submitв интерфейсеExecutorService - Переопределяет:
-
submitв классеAbstractExecutorService - Параметры типа:
-
T- тип результата - Параметры:
-
task- задача для представления -
result- результат для возврата - Возвращает:
- Future, представляющий ожидаемое завершение задачи
- Исключения:
-
RejectedExecutionException- если задача не может быть запланирована для выполнения -
NullPointerException- если задача равна null
submit
public <T> Future<T> submit(Callable<T> task)
ExecutorServiceget вернёт результат задачи при успешном выполнении. Если требуется немедленно заблокировать ожидание завершения задачи, можно использовать конструкции вида result = exec.submit(aCallable).get();
Примечание: класс Executors содержит набор методов, которые могут преобразовывать некоторые другие распространенные объекты, подобные замыканиям, например, PrivilegedAction в форму Callable, чтобы их можно было представить.
- Указано в:
-
submitв интерфейсеExecutorService - Переопределяет:
-
submitв классеAbstractExecutorService - Параметры типа:
-
T- тип результата задачи - Параметры:
-
task- задача для представления - Возвращает:
- Future, представляющий ожидаемое завершение задачи
- Исключения:
-
RejectedExecutionException- если задача не может быть запланирована для выполнения -
NullPointerException- если задача равна null
Установить политику продолжения периодических задач после завершения
public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value)
shutdownNow или политика будет установлена в значение false, если выполнение уже остановлено. По умолчанию это значение false. - Параметры:
-
value- еслиtrue, продолжить после завершения, иначе - нет - См. также:
Получить политику продолжения периодических задач после завершения
public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()
shutdownNow или политика будет установлена в значение false, если выполнение уже остановлено. По умолчанию это значение false. - Возвращает:
-
trueесли продолжить после завершения - См. также:
Установить политику выполнения отложенных задач после завершения
public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value)
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 - Выбрасывает:
-
SecurityException- если существует менеджер безопасности и остановка этой ExecutorService может манипулировать потоками, которые вызывающий элемент не имеет права изменять, потому что он не обладаетRuntimePermission("modifyThread"), или методcheckAccessменеджера безопасности отказывается предоставить доступ.
shutdownNow
public List<Runnable> shutdownNow()
Этот метод не ожидает завершения активно выполняемых задач. Используйте awaitTermination для этого.
Гарантий, помимо наилучших усилий по прекращению обработки активно выполняемых задач, нет. Эта реализация прерывает задачи через Thread.interrupt(); любая задача, которая не отвечает на прерывания, может никогда не завершиться.
- Specified by:
-
shutdownNowin interfaceExecutorService - Overrides:
-
shutdownNowin classThreadPoolExecutor - Returns:
- список задач, которые никогда не начинали выполнение. Каждый элемент этого списка —
ScheduledFuture. Для задач, отправленных через один изscheduleметодов, элемент будет идентичен возвращённомуScheduledFuture. Для задач, отправленных с помощьюexecute, элемент будет задачей с нулевой задержкойScheduledFuture. - Throws:
-
SecurityException- если существует менеджер безопасности и завершение работы этого ExecutorService может манипулировать потоками, которые вызывающему объекту не разрешено изменять, потому что он не владеетRuntimePermission("modifyThread"), или методcheckAccessменеджера безопасности отклоняет доступ.
getQueue
public BlockingQueue<Runnable> getQueue()
Каждый элемент этой очереди — ScheduledFuture. Для задач, отправленных через один из schedule методов, элемент будет идентичен возвращаемому ScheduledFuture. Для задач, отправленных с помощью execute, элемент будет задачей с нулевой задержкой ScheduledFuture.
Итерация по этой очереди не гарантирует прохождения задач в порядке их выполнения.
- Overrides:
-
getQueueв классеThreadPoolExecutor - Возвращает:
- очередь задач
© 1993, 2021, 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/17/docs/api/java.base/java/util/concurrent/ScheduledThreadPoolExecutor.html