Spec-Zone.ru › OpenJDK 27

Класс 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)
Планирует многократное выполнение с фиксированной частотой указанной задачи, начиная в заданное время.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, является ли другой объект «равным» этому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API может быть удален в будущей версии.
Финализация объявлена устаревшей и будет удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого объекта Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно вследствие уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно вследствие уведомления или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно вследствие уведомления или прерывания, либо до истечения заданного промежутка реального времени.

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

Timer

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

Timer

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

Timer

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

Timer

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()

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по 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