Интерфейс ScheduledExecutorService
- Все суперинтерфейсы:
AutoCloseable, Executor, ExecutorService
- Все известные классы, реализующие этот интерфейс:
ForkJoinPool, ScheduledThreadPoolExecutor
public interface ScheduledExecutorService extends ExecutorService
ExecutorService, который может планировать выполнение команд по истечении заданной задержки или выполнять их периодически. Методы schedule создают задачи с различными задержками и возвращают объект задачи, который можно использовать для отмены или проверки выполнения. Методы scheduleAtFixedRate и scheduleWithFixedDelay создают и выполняют задачи, которые выполняются периодически до отмены.
Команды, отправленные с помощью методов submit Executor.execute(Runnable) и ExecutorService, планируются с запрошенной задержкой, равной нулю. В методах 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 |
Отправляет периодическое действие, которое впервые становится доступным для выполнения по истечении заданной начальной задержки, а затем выполняется с заданной задержкой между завершением одного выполнения и началом следующего. |
Методы, объявленные в интерфейсе ExecutorService
awaitTermination, close, invokeAll, invokeAll, invokeAny, invokeAny, isShutdown, isTerminated, shutdown, shutdownNow, submit, submit, submit
Подробное описание методов
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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/ScheduledExecutorService.html