Интерфейс ScheduledExecutorService
- Все суперинтерфейсы:
-
Executor,ExecutorService
- Все известные реализующие классы:
ScheduledThreadPoolExecutor
public interface ScheduledExecutorService extends ExecutorService
An 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) | Отправляет периодическое действие, которое активируется сначала после заданной начальной задержки, а затем с заданным периодом; то есть выполнение начнется после |
ScheduledFuture<?> | scheduleWithFixedDelay(Runnable command,
long initialDelay,
long delay,
TimeUnit unit) | Отправляет периодическое действие, которое активируется сначала после заданной начальной задержки, а затем с заданной задержкой между завершением одного выполнения и началом следующего. |
Методы, объявленные в интерфейсе java.util.concurrent.Executor
execute Методы, объявленные в интерфейсе java.util.concurrent.ExecutorService
awaitTermination, 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- единица измерения времени для параметров initialDelay и period - Возвращает:
- ScheduledFuture, представляющий ожидаемое завершение серии повторяющихся задач. Метод
get()future никогда не вернет результат нормально и выбросит исключение при отмене задачи или ненормальном завершении выполнения задачи. - Исключения:
-
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- единица измерения времени для параметров initialDelay и delay - Возвращает:
- ScheduledFuture, представляющий ожидаемое завершение серии повторяющихся задач. Метод
get()future никогда не вернёт результат нормально и выбросит исключение при отмене задачи или ненормальном завершении выполнения задачи. - Исключения:
-
RejectedExecutionException- если задачу невозможно запланировать для выполнения -
NullPointerException- если команда или единица измерения равны null -
IllegalArgumentException- если задержка меньше или равна нулю
© 1993, 2020, 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/11/docs/api/java.base/java/util/concurrent/ScheduledExecutorService.html