Spec-Zone.ru › OpenJDK 25

Класс 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

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

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, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/Timer.html

Spec-Zone.ru

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