Пример использования Java Timer и TimerTask

Пример использования Java Timer и TimerTask

Java Timer и TimerTask. Теория

Класс java.util.Timer является служебным и может быть использован для отложенного запуска потока в определенное время. Класс Java Timer может быть использован для запланированной задачи, которая должна будет выполниться один раз или запускаться регулярно в определенное время.

Класс java.util.TimerTask является абстрактным классом, который реализует интерфейс Runnable. Мы должны унаследоваться от этого класса, создавая наш собственный TimerTask.

  • Класс Timer является потокобезопасным, поэтому несколько потоков могут совместно использовать один объект Timer без необходимости внешней синхронизации.
  • Класс Timer использует java.util.TaskQueue для выполнения задач с определенной периодичностью.
  • В одно и то же время может быть выполнен только один поток TimerTask. Например, если вы создаете Timer, который должен запускаться каждые 10 секунд, но выполнение одного потока занимает целых 20 секунд, то объект Timer будет добавлять задачи в очередь пока один поток не закончит свое выполнение. Как только он отработает свои 20 секунд, то об этом будет уведомлена очередь и следующий поток из этой очереди начнет работать.

Класс Timer использует методы wait() и notify() для планирования задач.

Java Timer и TimerTask. Практика

Давайте на примере рассмотрим использование Timer и TimerTask в Java:

Обратите внимание, что выполнение одного потока будет длиться 20 секунд, а объект Timer запланирован запускаться каждые 10 секунд. Вот результат выполнения программы:

Результат выполнения подтверждает, что если задача уже выполняется, то Timer будет ждать её до конца. Когда он закончил одну задачу, то сразу же начнет следующую задачу из очереди.

Метод cancel() класса Timer используется для завершения выполнения таймера и отказа от дальнейшего выполнения любых запланированных задач. Однако это не мешает ему дать закончить выполнение текущей задачи. Если таймер работает в демона, то будет прекращен, как только все пользовательские потоки закончат свое выполнение.

Класс Таймер содержит несколько методов schedule(), чтобы запланировать задачу на одноразовое выполнение в указанное время или регулярное выполнение с определенной задержкой. Есть несколько методов scheduleAtFixedRate() для периодического запуска задачи с определенным интервалом.

Вот и все, что нужно знать о работе с Java Timer и TimerTask в Java. Следите за обновлениями сайта и разделом Многопоточность в Java.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *