Spec-Zone.ru › OpenJDK 27

Интерфейс 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(Runnable command, long delay, TimeUnit unit)
Отправляет одноразовую задачу, которая становится доступной для выполнения после заданной задержки.
<V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
Отправляет одноразовую задачу, возвращающую значение и становящуюся доступной для выполнения после заданной задержки.
ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
Отправляет периодическое действие, которое становится доступным для выполнения сначала после заданной начальной задержки, а затем с заданным периодом; то есть выполнение начнётся через initialDelay, затем через initialDelay + period, затем через initialDelay + 2 * period и так далее.
ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
Отправляет периодическое действие, которое становится доступным для выполнения сначала после заданной начальной задержки, а затем с заданной задержкой между завершением одного выполнения и началом следующего.

Методы, объявленные в интерфейсе Executor

execute
Модификатор и тип Метод Описание
void execute(Runnable command)
Выполняет заданную команду в некоторый момент в будущем.

Методы, объявленные в интерфейсе ExecutorService

awaitTermination, close, invokeAll, invokeAll, invokeAny, invokeAny, isShutdown, isTerminated, shutdown, shutdownNow, submit, submit, submit
Модификатор и тип Метод Описание
boolean awaitTermination(long timeout, TimeUnit unit)
Блокирует выполнение до тех пор, пока все задачи не завершатся после запроса на завершение работы, не истечёт время ожидания или не будет прерван текущий поток — в зависимости от того, что произойдёт первым.
default void close()
Инициирует упорядоченное завершение работы, при котором ранее отправленные задачи выполняются, но новые задачи приниматься не будут.
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
Выполняет заданные задачи и возвращает список объектов Future с их состоянием и результатами после завершения всех задач.
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
Выполняет заданные задачи и возвращает список объектов Future с их состоянием и результатами после завершения всех задач или истечения времени ожидания — в зависимости от того, что произойдёт первым.
<T> T invokeAny(Collection<? extends Callable<T>> tasks)
Выполняет заданные задачи и возвращает результат одной из них, если она завершилась успешно (то есть без выбрасывания исключения).
<T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
Выполняет заданные задачи и возвращает результат одной из них, если она завершилась успешно (то есть без выбрасывания исключения) до истечения заданного времени ожидания.
boolean isShutdown()
Возвращает true, если работа этого исполнителя была завершена.
boolean isTerminated()
Возвращает true, если после завершения работы все задачи выполнены.
void shutdown()
Инициирует упорядоченное завершение работы, при котором ранее отправленные задачи выполняются, но новые задачи приниматься не будут.
List<Runnable> shutdownNow()
Пытается остановить все активно выполняемые задачи, прекращает обработку ожидающих задач и возвращает список задач, ожидавших выполнения.
Future<?> submit(Runnable task)
Отправляет задачу Runnable на выполнение и возвращает объект Future, представляющий эту задачу.
<T> Future<T> submit(Runnable task, T result)
Отправляет задачу Runnable на выполнение и возвращает объект Future, представляющий эту задачу.
<T> Future<T> submit(Callable<T> task)
Отправляет на выполнение задачу, возвращающую значение, и возвращает объект 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 меньше или равна нулю

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API