Spec-Zone.ru › OpenJDK 8

Класс 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, Date time)

Планирует указанную задачу для выполнения в указанное время.

void schedule(TimerTask task, Date firstTime, long period)

Планирует указанную задачу для многократного выполнения с фиксированной задержкой, начиная с указанного времени.

void schedule(TimerTask task, long delay)

Планирует указанную задачу для выполнения после указанной задержки.

void schedule(TimerTask task, long delay, long period)

Планирует указанную задачу для многократного выполнения с фиксированной задержкой, начиная после указанной задержки.

void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)

Планирует указанную задачу для многократного выполнения с фиксированной скоростью, начиная с указанного времени.

void scheduleAtFixedRate(TimerTask task, long delay, long period)

Планирует указанную задачу для многократного выполнения с фиксированной скоростью, начиная после указанной задержки.

Методы, унаследованные от класса java.lang.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()

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

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

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

purge

public int purge()

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

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

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

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

© 1993, 2020, 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