Интерфейс ScheduledExecutorService
- Все суперинтерфейсы:
AutoCloseable, Executor, ExecutorService
- Все известные классы-реализации:
ForkJoinPool, ScheduledThreadPoolExecutor
public interface ScheduledExecutorService extends ExecutorService
ExecutorService, позволяющий планировать выполнение команд после заданной задержки или периодически. Методы schedule создают задачи с различными задержками и возвращают объекты ScheduledFuture, которые можно использовать для отмены или проверки выполнения. По истечении задержки задачи становятся доступными для выполнения и ведут себя так же, как другие задачи ExecutorService, за исключением того, что методы scheduleAtFixedRate и scheduleWithFixedDelay создают и выполняют задачи, которые запускаются периодически до отмены.
Команды, отправленные с помощью методов Executor.execute(Runnable) и ExecutorService submit, планируются с нулевой задержкой. В методах schedule также допускаются нулевые и отрицательные задержки (но не периоды); они рассматриваются как запросы на немедленное выполнение.
Все методы schedule принимают в качестве аргументов относительные задержки и периоды, а не абсолютное время или даты. Абсолютное время, представленное объектом Date, легко преобразовать в требуемый формат. Например, чтобы запланировать выполнение на определённое время в будущем date, можно использовать: schedule(task,
date.getTime() - System.currentTimeMillis(),
TimeUnit.MILLISECONDS). Однако следует учитывать, что истечение относительной задержки может не совпасть с текущим временем Date, когда задача становится доступной для выполнения, из-за протоколов сетевой синхронизации времени, дрейфа часов или других факторов.
Класс Executors предоставляет удобные фабричные методы для реализаций ScheduledExecutorService, доступных в этом пакете.
Пример использования
Ниже приведён класс с методом, который настраивает ScheduledExecutorService на подачу звукового сигнала каждые десять секунд в течение часа:import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
public void beepForAnHour() {
Runnable beeper = () -> System.out.println("beep");
ScheduledFuture<?> beeperHandle =
scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
Runnable canceller = () -> beeperHandle.cancel(false);
scheduler.schedule(canceller, 1, HOURS);
}
}
- С момента выпуска:
- 1.5
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
ScheduledFuture |
schedule |
Отправляет одноразовую задачу, которая становится доступной для выполнения после заданной задержки. |
<V> ScheduledFuture |
schedule |
Отправляет одноразовую задачу, возвращающую значение и становящуюся доступной для выполнения после заданной задержки. |
ScheduledFuture |
scheduleAtFixedRate |
Отправляет периодическое действие, которое становится доступным для выполнения сначала после заданной начальной задержки, а затем с заданным периодом; то есть выполнение начнётся через initialDelay, затем через initialDelay + period, затем через initialDelay + 2 * period и так далее. |
ScheduledFuture |
scheduleWithFixedDelay |
Отправляет периодическое действие, которое становится доступным для выполнения сначала после заданной начальной задержки, а затем с заданной задержкой между завершением одного выполнения и началом следующего. |
Методы, объявленные в интерфейсе Executor
execute | Модификатор и тип | Метод | Описание |
|---|---|---|
void |
execute |
Выполняет заданную команду в некоторый момент в будущем. |
Методы, объявленные в интерфейсе ExecutorService
awaitTermination, close, invokeAll, invokeAll, invokeAny, invokeAny, isShutdown, isTerminated, shutdown, shutdownNow, submit, submit, submit | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
awaitTermination |
Блокирует выполнение до тех пор, пока все задачи не завершатся после запроса на завершение работы, не истечёт время ожидания или не будет прерван текущий поток — в зависимости от того, что произойдёт первым. |
default void |
close() |
Инициирует упорядоченное завершение работы, при котором ранее отправленные задачи выполняются, но новые задачи приниматься не будут. |
<T> List |
invokeAll |
Выполняет заданные задачи и возвращает список объектов Future с их состоянием и результатами после завершения всех задач. |
<T> List |
invokeAll |
Выполняет заданные задачи и возвращает список объектов Future с их состоянием и результатами после завершения всех задач или истечения времени ожидания — в зависимости от того, что произойдёт первым. |
<T> T |
invokeAny |
Выполняет заданные задачи и возвращает результат одной из них, если она завершилась успешно (то есть без выбрасывания исключения). |
<T> T |
invokeAny |
Выполняет заданные задачи и возвращает результат одной из них, если она завершилась успешно (то есть без выбрасывания исключения) до истечения заданного времени ожидания. |
boolean |
isShutdown() |
Возвращает true, если работа этого исполнителя была завершена. |
boolean |
isTerminated() |
Возвращает true, если после завершения работы все задачи выполнены. |
void |
shutdown() |
Инициирует упорядоченное завершение работы, при котором ранее отправленные задачи выполняются, но новые задачи приниматься не будут. |
List |
shutdownNow() |
Пытается остановить все активно выполняемые задачи, прекращает обработку ожидающих задач и возвращает список задач, ожидавших выполнения. |
Future |
submit |
Отправляет задачу Runnable на выполнение и возвращает объект Future, представляющий эту задачу. |
<T> Future |
submit |
Отправляет задачу Runnable на выполнение и возвращает объект Future, представляющий эту задачу. |
<T> Future |
submit |
Отправляет на выполнение задачу, возвращающую значение, и возвращает объект Future, представляющий ожидающий результат задачи. |
Подробное описание методов
schedule
ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
- Параметры:
-
command— задача для выполнения -
delay— время задержки выполнения, отсчитываемое от текущего момента -
unit— единица измерения параметра задержки - Возвращает:
- ScheduledFuture, представляющий ожидающее завершения задачи; после завершения вызов его метода
get()вернётnull - Исключения:
-
RejectedExecutionException— если задачу невозможно запланировать для выполнения -
NullPointerException— если command или unit равен null
schedule
<V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
- Параметры типа:
V— тип результата callable- Параметры:
-
callable— функция для выполнения -
delay— время задержки выполнения, отсчитываемое от текущего момента -
unit— единица измерения параметра задержки - Возвращает:
- ScheduledFuture, который можно использовать для получения результата или отмены задачи
- Исключения:
-
RejectedExecutionException— если задачу невозможно запланировать для выполнения -
NullPointerException— если callable или unit равен null
scheduleAtFixedRate
ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
initialDelay, затем через initialDelay + period, затем через initialDelay + 2 * period и так далее. Последовательность выполнений задачи продолжается бесконечно, пока не произойдёт одно из следующих исключительных завершений:
- Задача явно отменена с помощью возвращённого объекта future.
- Работа исполнителя завершается, что также приводит к отмене задачи.
- При выполнении задачи выбрасывается исключение. В этом случае вызов
getдля возвращённого объекта future выброситExecutionException, содержащее это исключение в качестве причины.
isDone() для возвращённого объекта future вернут true. Если выполнение этой задачи длится дольше, чем заданный период, последующие выполнения могут начаться с опозданием, но не будут выполняться одновременно.
- Параметры:
-
command— задача для выполнения -
initialDelay— задержка перед первым выполнением -
period— период между последовательными выполнениями -
unit— единица измерения параметров initialDelay и period - Возвращает:
- ScheduledFuture, представляющий ожидающее завершения выполнение серии повторяющихся задач. Метод
get()этого объекта future никогда не завершится обычным образом и выбросит исключение при отмене задачи или её ненормальном завершении. - Исключения:
-
RejectedExecutionException— если задачу невозможно запланировать для выполнения -
NullPointerException— если command или unit равен null -
IllegalArgumentException— если period меньше или равен нулю
scheduleWithFixedDelay
ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
Последовательность выполнений задачи продолжается бесконечно, пока не произойдёт одно из следующих исключительных завершений:
- Задача явно отменена с помощью возвращённого объекта future.
- Работа исполнителя завершается, что также приводит к отмене задачи.
- При выполнении задачи выбрасывается исключение. В этом случае вызов
getдля возвращённого объекта future выброситExecutionException, содержащее это исключение в качестве причины.
isDone() для возвращённого объекта future вернут true.- Параметры:
-
command— задача для выполнения -
initialDelay— задержка перед первым выполнением -
delay— задержка между завершением одного выполнения и началом следующего -
unit— единица измерения параметров initialDelay и delay - Возвращает:
- ScheduledFuture, представляющий ожидающее завершения выполнение серии повторяющихся задач. Метод
get()этого объекта future никогда не завершится обычным образом и выбросит исключение при отмене задачи или её ненормальном завершении. - Исключения:
-
RejectedExecutionException— если задачу невозможно запланировать для выполнения -
NullPointerException— если command или unit равен null -
IllegalArgumentException— если delay меньше или равна нулю
© 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.