Spec-Zone .ru
спецификации, руководства, описания, API
|
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 (зарегистрируйте n), где n является числом одновременно запланированных задач.
Примечание реализации: Все конструкторы запускают поток таймера.
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)
Планирует указанную задачу для повторного выполнения с фиксированной процентной ставкой, начинаясь после указанной задержки.
|
public Timer()
public Timer(boolean isDaemon)
isDaemon
- истина, если связанный поток должен работать как демон.public Timer(String name)
name
- имя связанного потокаNullPointerException
- если name
нульpublic Timer(String name, boolean isDaemon)
name
- имя связанного потокаisDaemon
- истина, если связанный поток должен работать как демонNullPointerException
- если name
нульpublic void schedule(TimerTask task, long delay)
task
- задача, которая будет запланирована.delay
- задержка миллисекунд перед задачей должна быть выполнена.IllegalArgumentException
- если delay отрицателен, или delay + System.currentTimeMillis() отрицателен.IllegalStateException
- если задача была уже запланирована или отменена, таймер был отменен, или завершенный поток таймера.NullPointerException
- если task
нульpublic void schedule(TimerTask task, Date time)
task
- задача, которая будет запланирована.time
- время, в которое состоит в том, чтобы быть выполнена задача.IllegalArgumentException
- если time.getTime() отрицателен.IllegalStateException
- если задача была уже запланирована или отменена, таймер был отменен, или завершенный поток таймера.NullPointerException
- если task
или time
нуль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
нуль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
нуль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
нуль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
нульpublic void cancel()
Отметьте, что вызов этого метода изнутри метода выполнения задачи таймера, которая была вызвана этим таймером абсолютно, гарантирует, что продолжающееся выполнение задачи является последним выполнением задачи, которое будет когда-либо выполняться этим таймером.
Этот метод можно неоднократно вызывать; вторые и последующие вызовы не имеют никакого эффекта.
public int purge()
У большинства программ не будет никакой потребности вызвать этот метод. Это разрабатывается для использования редким приложением, которое отменяет большое количество задач. Вызов этого метода обменивает время на пространство: время выполнения метода может быть пропорциональным n + c, регистрируют n, где n является числом задач в очереди, и c является числом отмененных задач.
Отметьте, что допустимо вызвать этот метод изнутри задача, запланированная на этот таймер.
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.