Spec-Zone.ru › OpenJDK 21

Класс 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 — количество одновременно запланированных задач.

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

С момента:
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()
Завершает этот таймер, отбрасывая все текущие запланированные задачи. Не мешает текущей выполняющейся задаче (если она существует). После завершения таймера его поток выполнения завершается плавно, и больше задач не могут быть запланированы на него.

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

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

purge

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

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

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

Возвращает:
количество задач, удаленных из очереди.
С тех пор:
1.5

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

Spec-Zone.ru

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