Spec-Zone.ru › OpenJDK 21

Интерфейс ScheduledExecutorService

Все суперинтерфейсы:
AutoCloseable, Executor, ExecutorService
Все известные реализующие классы:
ScheduledThreadPoolExecutor
public interface ScheduledExecutorService extends ExecutorService
Утилита ExecutorService, позволяющая планировать выполнение задач через заданный интервал времени или периодически.

Методы schedule создают задачи с различными задержками и возвращают объект задачи, который может быть использован для отмены или проверки выполнения. Методы 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)
Отправляет периодическое действие, которое активируется в первый раз после заданной начальной задержки, а затем с заданной задержкой между завершением одного выполнения и началом следующего.

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

execute

Методы, объявленные в интерфейсе java.util.concurrent.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 - если команда или единица измерения равны null

schedule

<V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
Отправляет однократную задачу с возвращаемым значением, которая активируется после заданной задержки.
Типы параметров:
V - тип результата callable
Параметры:
callable - функция для выполнения
delay - время задержки выполнения с текущего момента
unit - единица измерения времени параметра задержки
Возвращаемое значение:
ScheduledFuture, который может быть использован для извлечения результата или отмены
Исключения:
RejectedExecutionException - если задача не может быть запланирована для выполнения
NullPointerException - если callable или единица измерения равны 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 - единица измерения времени для начальной задержки и периода
Возвращаемое значение:
ScheduledFuture, представляющий ожидаемое завершение серии повторяющихся задач. Метод get() будущего никогда не вернет значение нормально и выбросит исключение при отмене задачи или аномальном завершении выполнения задачи.
Исключения:
RejectedExecutionException - если задача не может быть запланирована для выполнения
NullPointerException - если команда или единица измерения равны null
IllegalArgumentException - если период меньше или равен нулю

scheduleWithFixedDelay

ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
Отправляет периодическое действие, которое активируется в первый раз после заданной начальной задержки, а затем с заданной задержкой между завершением одного выполнения и началом следующего.

Последовательность выполнений задач продолжается неопределенно до тех пор, пока не произойдет одно из следующих исключительных завершений:

  • Задача явно отменяется через возвращённый future.
  • Исполнитель завершается, что также приводит к отмене задачи.
  • Во время выполнения задачи возникает исключение. В этом случае вызов get на возвращенном future приведет к исключению ExecutionException, содержащему исключение в качестве причины.
Последующие выполнения подавляются. Последующие вызовы isDone() на возвращенном future вернут true.
Параметры:
command - задача для выполнения
initialDelay - время задержки первого выполнения
delay - задержка между завершением одного выполнения и началом следующего
unit - единица измерения времени для начальной задержки и задержки
Возвращаемое значение:
ScheduledFuture, представляющий ожидаемое завершение серии повторяющихся задач. Метод get() будущего никогда не вернет значение нормально и выбросит исключение при отмене задачи или аномальном завершении выполнения задачи.
Исключения:
RejectedExecutionException - если задача не может быть запланирована для выполнения
NullPointerException - если команда или единица измерения равны null
IllegalArgumentException - если задержка меньше или равна нулю

© 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/ScheduledExecutorService.html

Spec-Zone.ru

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