Spec-Zone.ru › OpenJDK 17

Класс Timer

java.lang.Object
java.util.Timer
public class Timer extends Object
Утилита для потоков, позволяющая планировать задачи для выполнения в фоновом потоке в будущем. Задачи могут быть запланированы на однократное выполнение или на повторное выполнение через регулярные интервалы.

Каждому объекту Timer соответствует один фоновый поток, который используется для последовательного выполнения всех задач таймера. Задачи таймера должны выполняться быстро. Если задача таймера занимает слишком много времени, она "захватывает" поток выполнения задач таймера. Это, в свою очередь, может задерживать выполнение последующих задач, которые могут "накапливаться" и выполняться в быстрой последовательности, когда (и если) проблемная задача, наконец, завершит выполнение.

После того, как последняя активная ссылка на объект Timer исчезнет и все ожидающие задачи завершат выполнение, поток выполнения задач таймера завершается нормально (и становится доступным для сборки мусора). Однако это может занимать неопределённо долгое время. По умолчанию поток выполнения задач не работает как демон-поток, поэтому он может препятствовать завершению приложения. Если вызывающая сторона хочет быстро завершить поток выполнения задач таймера, она должна вызвать метод cancel таймера.

Если поток выполнения задач таймера завершится неожиданно, например, потому что вызван его метод stop, любая дальнейшая попытка запланировать задачу в таймере приведёт к IllegalStateException, как если бы был вызван метод cancel таймера.

Этот класс потокобезопасен: несколько потоков могут использовать один объект Timer без необходимости внешней синхронизации.

Этот класс не гарантирует выполнение в реальном времени: он планирует задачи с помощью метода Object.wait(long).

Java 5.0 представила пакет java.util.concurrent и одной из утилит для конкурентного программирования в нём является ScheduledThreadPoolExecutor, который представляет собой пул потоков для повторного выполнения задач с заданной скоростью или задержкой. Он фактически является более универсальной заменой для сочетания Timer/TimerTask, поскольку он позволяет использовать несколько потоков обслуживания, принимает различные единицы времени и не требует наследования от TimerTask (достаточно реализовать Runnable). Настройка ScheduledThreadPoolExecutor с одним потоком эквивалентна Timer.

Примечание для реализации: Этот класс масштабируется до большого количества одновременно запланированных задач (тысячи задач не должны представлять проблемы). Внутренне он использует двоичную кучу для представления очереди задач, поэтому стоимость планирования задачи равна O(log n), где n — количество одновременно запланированных задач.

Примечание для реализации: Все конструкторы запускают поток таймера.

Since:
1.3
См. также:
  • TimerTask
  • Object.wait(long)

Краткое описание конструкторов

Конструктор Описание
Timer()
Создаёт новый таймер.
Timer(boolean isDaemon)
Создаёт новый таймер, чётный связанный поток может быть задан для работы в качестве демона.
Timer(String name)
Создаёт новый таймер, чётный связанный поток имеет указанное имя.
Timer(String name, boolean isDaemon)
Создаёт новый таймер, чётный связанный поток имеет указанное имя и может быть задан для работы в качестве демона.

Краткое описание методов

Модификатор и тип Метод Описание
void cancel()
Завершает этот таймер, отбрасывая все текущие запланированные задачи.
int purge()
Удаляет все отменённые задачи из очереди задач этого таймера.
void schedule(TimerTask task, long delay)
Планирует указанную задачу на выполнение после указанной задержки.
void schedule(TimerTask task, long delay, long period)
Планирует указанную задачу для повторного выполнения с фиксированной задержкой, начиная после указанной задержки.
void schedule(TimerTask task, Date time)
Планирует указанную задачу на выполнение в указанное время.
void schedule(TimerTask task, Date firstTime, long period)
Планирует указанную задачу для повторного выполнения с фиксированной задержкой, начиная в указанное время.
void scheduleAtFixedRate(TimerTask task, long delay, long period)
Планирует указанную задачу для повторного выполнения с фиксированной скоростью, начиная после указанной задержки.
void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
Планирует указанную задачу для повторного выполнения с фиксированной скоростью, начиная в указанное время.

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание конструкторов

Таймер

public Timer()
Создаёт новый таймер. Ассоциированный поток не работает как демон.

Таймер

public Timer(boolean isDaemon)
Создаёт новый таймер, ассоциированный поток которого может быть задан для работы как демон. Поток демон используется, если таймер будет использоваться для планирования повторяющихся "уходных задач", которые должны выполняться, пока приложение работает, но не должны удлинять время жизни приложения.
Параметры:
isDaemon - true, если ассоциированный поток должен работать как демон.

Таймер

public Timer(String name)
Создаёт новый таймер, ассоциированный поток которого имеет указанное имя. Ассоциированный поток не работает как демон.
Параметры:
name - имя ассоциированного потока
Исключения:
NullPointerException - если name равно null
С:
1.5

Таймер

public Timer(String name, boolean isDaemon)
Создаёт новый таймер, ассоциированный поток которого имеет указанное имя и может быть задан для работы как демон.
Параметры:
name - имя ассоциированного потока
isDaemon - true, если ассоциированный поток должен работать как демон
Исключения:
NullPointerException - если name равно null
С:
1.5

Подробное описание методов

schedule

public void schedule(TimerTask task, long delay)
Планирует выполнение указанной задачи по истечении заданного задержки.
Параметры:
task - задача, подлежащая планированию.
delay - задержка в миллисекундах перед выполнением задачи.
Исключения:
IllegalArgumentException - если delay отрицательно, или delay + System.currentTimeMillis() отрицательно.
IllegalStateException - если задача уже была запланирована или отменена, таймер был отменён или поток таймера завершён.
NullPointerException - если task равно null

schedule

public void schedule(TimerTask task, Date time)
Планирует выполнение указанной задачи в указанное время. Если время в прошлом, задача планируется на немедленное выполнение.
Параметры:
task - задача, подлежащая планированию.
time - время выполнения задачи.
Исключения:
IllegalArgumentException - если time.getTime() отрицательно.
IllegalStateException - если задача уже была запланирована или отменена, таймер был отменён или поток таймера завершён.
NullPointerException - если task или time равно null

schedule

public void schedule(TimerTask task, long delay, long period)
Планирует выполнение указанной задачи с повторяющимся выполнением с фиксированной задержкой, начиная после заданной задержки. Последующие выполнения происходят с приблизительно регулярными интервалами, разделенными указанным периодом.

При выполнении с фиксированной задержкой каждое выполнение планируется относительно фактического времени выполнения предыдущего выполнения. Если выполнение задерживается по какой-либо причине (например, сборка мусора или другая фоновая активность), последующие выполнения также будут задерживаться. В долгосрочной перспективе частота выполнения обычно будет немного ниже, чем обратная величина указанного периода (при условии, что системные часы, лежащие в основе Object.wait(long), точны).

Выполнение с фиксированной задержкой подходит для повторяющихся задач, требующих "гладкости". Другими словами, это подходит для задач, где более важно поддерживать точную частоту в краткосрочной перспективе, чем в долгосрочной. Это включает большинство задач анимации, таких как мигание курсора с регулярными интервалами. Это также включает задачи, в которых выполняется регулярная деятельность в ответ на ввод пользователя, например, автоматическое повторение символа, пока нажата клавиша.

Параметры:
task - задача, подлежащая планированию.
delay - задержка в миллисекундах перед выполнением задачи.
period - время в миллисекундах между последовательными выполнениями задачи.
Исключения:
IllegalArgumentException - если delay < 0, или delay + System.currentTimeMillis() < 0, или period <= 0
IllegalStateException - если задача уже была запланирована или отменена, таймер был отменён или поток таймера завершён.
NullPointerException - если task равно null

schedule

public void schedule(TimerTask task, Date firstTime, long period)
Планирует выполнение указанной задачи с повторяющимся выполнением с фиксированной задержкой, начиная с указанного времени. Последующие выполнения происходят с приблизительно регулярными интервалами, разделёнными указанным периодом.

При выполнении с фиксированной задержкой каждое выполнение планируется относительно фактического времени выполнения предыдущего выполнения. Если выполнение задерживается по какой-либо причине (например, сборка мусора или другая фоновая активность), последующие выполнения будут задерживаться тоже. В долгосрочной перспективе частота выполнения будет, как правило, немного ниже, чем обратная величина указанного периода (при условии, что системные часы, лежащие в основе Object.wait(long), точны). Вследствие вышесказанного, если запланированное первое время находится в прошлом, оно планируется на немедленное выполнение.

Выполнение с фиксированной задержкой подходит для повторяющихся задач, требующих "гладкости". Другими словами, это подходит для задач, где более важно поддерживать точную частоту в краткосрочной перспективе, чем в долгосрочной. Это включает большинство задач анимации, таких как мигание курсора с регулярными интервалами. Это также включает задачи, в которых выполняется регулярная деятельность в ответ на ввод пользователя, например, автоматическое повторение символа, пока нажата клавиша.

Параметры:
task - задача, подлежащая планированию.
firstTime - первое время выполнения задачи.
period - время в миллисекундах между последовательными выполнениями задачи.
Исключения:
IllegalArgumentException - если firstTime.getTime() < 0, или period <= 0
IllegalStateException - если задача уже была запланирована или отменена, таймер был отменён или поток таймера завершён.
NullPointerException - если task или firstTime равно null

scheduleAtFixedRate

public void scheduleAtFixedRate(TimerTask task, long delay, long period)
Планирует выполнение указанной задачи с повторяющимся выполнением с фиксированной скоростью, начиная после указанной задержки. Последующие выполнения происходят с приблизительно регулярными интервалами, разделёнными указанным периодом.

При выполнении с фиксированной скоростью каждое выполнение планируется относительно запланированного времени выполнения начального выполнения. Если выполнение задерживается по любой причине (например, сборка мусора или другая фоновая активность), два или более выполнений произойдут в быстрой последовательности, чтобы "догнать". В долгосрочной перспективе частота выполнения будет точно равна обратной величине указанного периода (при условии, что системные часы, лежащие в основе Object.wait(long), точны).

Выполнение с фиксированной скоростью подходит для повторяющихся задач, чувствительных к абсолютному времени, например, звонка колокола каждый час в час, или выполнения запланированного обслуживания каждый день в определённое время. Также это подходит для повторяющихся задач, где важно общее время выполнения фиксированного числа выполнений, например, таймера обратного отсчёта, который тикает один раз в секунду в течение десяти секунд. Наконец, выполнение с фиксированной скоростью подходит для планирования нескольких повторяющихся задач таймера, которые должны оставаться синхронизированными друг с другом.

Параметры:
task - задача, подлежащая планированию.
delay - задержка в миллисекундах перед выполнением задачи.
period - время в миллисекундах между последовательными выполнениями задачи.
Исключения:
IllegalArgumentException - если delay < 0, или delay + System.currentTimeMillis() < 0, или period <= 0
IllegalStateException - если задача уже была запланирована или отменена, таймер был отменён или поток таймера завершён.
NullPointerException - если task равно null

scheduleAtFixedRate

public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
Распределяет указанную задачу для многократного выполнения с фиксированной скоростью, начиная со времени, указанного в параметре. Последующие выполнения происходят с приблизительно равными интервалами, разделенными заданным периодом.

При выполнении с фиксированной скоростью каждое выполнение планируется относительно времени выполнения запланированного начального выполнения. Если выполнение задерживается по какой-либо причине (например, сборка мусора или другие фоновые задачи), два или более выполнений произойдут с высокой частотой, чтобы «догнать» пропущенные. В долгосрочной перспективе частота выполнения будет точно равна обратной величине заданного периода (при условии точности системных часов, на которых основана Object.wait(long)). Вследствие вышесказанного, если запланированное начальное время уже в прошлом, то любые «пропущенные» выполнения будут запланированы для немедленного «догоняющего» выполнения.

Выполнение с фиксированной скоростью подходит для повторяющихся задач, чувствительных к абсолютному времени, таких как звонок колокола каждый час в час или выполнение запланированного обслуживания каждый день в определенное время. Оно также подходит для повторяющихся задач, где важно общее время выполнения фиксированного числа выполнений, например, таймер обратного отсчета, который тикает один раз каждую секунду в течение десяти секунд. Наконец, выполнение с фиксированной скоростью подходит для планирования нескольких повторяющихся задач таймера, которые должны оставаться синхронизированными друг с другом.

Parameters:
task - задача, которая будет запланирована.
firstTime - Первое время, в которое задача должна быть выполнена.
period - время в миллисекундах между последовательными выполнениями задачи.
Throws:
IllegalArgumentException - если firstTime.getTime() < 0 или period <= 0
IllegalStateException - если задача уже была запланирована или отменена, таймер был отменен или поток таймера завершен.
NullPointerException - если task или firstTime равно null

cancel

public void cancel()
Завершает этот таймер, отбрасывая все текущие запланированные задачи. Не вмешивается в текущее выполняемое задание (если оно существует). После завершения таймера его выполнение завершается корректно, и больше задач на нём планировать нельзя.

Обратите внимание, что вызов этого метода изнутри метода run задачи таймера, которая была вызвана этим таймером, гарантирует, что текущее выполнение задачи является последним выполнением задачи, которое когда-либо будет выполнено этим таймером.

Этот метод может вызываться многократно; второй и последующие вызовы не оказывают никакого влияния.

purge

public int purge()
Удаляет все отменённые задачи из очереди задач этого таймера. Вызов этого метода не влияет на поведение таймера, но устраняет ссылки на отменённые задачи из очереди. Если на эти задачи нет внешних ссылок, они становятся доступными для сборки мусора.

Большинству программ не потребуется вызывать этот метод. Он предназначен для использования в редких приложениях, которые отменяют большое количество задач. Вызов этого метода обменивает время на место: время выполнения метода может быть пропорционально n + c log n, где n — количество задач в очереди, а c — количество отменённых задач.

Обратите внимание, что разрешается вызывать этот метод изнутри задачи, запланированной на этом таймере.

Returns:
количество задач, удаленных из очереди.
Since:
1.5

© 1993, 2021, 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/17/docs/api/java.base/java/util/Timer.html

Spec-Zone.ru

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