Spec-Zone.ru › OpenJDK 24

Класс Timer

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

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

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

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

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

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

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

Все конструкторы запускают поток таймера.

С:
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) точны). Вследствие вышесказанного, если запланированное первое время уже прошло, любые «пропущенные» выполнения будут запланированы для немедленного выполнения, чтобы «догнать».

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

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

cancel

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

Этот метод не мешает текущему выполняющемуся задаче (если она существует). После завершения работы таймера его поток выполнения завершается корректно, и больше никаких задач не могут быть запланированы на него.

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

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

См. также:
  • TimerTask.cancel()

purge

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

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

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

Возвращает:
количество удаленных из очереди задач.
С:
1.5
См. также:
  • cancel()
  • TimerTask.cancel()

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/Timer.html

Spec-Zone.ru

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