Java Timer, TimerTask, учебник по классу напоминаний с примером

Опубликовано: 2021-02-04
Java Timer, TimerTask, учебник по классу напоминаний с примером

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

java.util.TimerTask — это абстрактный класс, который реализует интерфейс Runnable, и нам нужно расширить этот класс, чтобы создать собственный TimerTask, который можно планировать с помощью класса java Timer .

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

Класс таймера Java

Класс Timer использует методы ожидания и уведомления объекта для планирования задач. TimerTask — это abstract class , и мы наследуем его, чтобы обеспечить конкретную реализацию. Класс TimerTask implements interface Runnable , поэтому это поток, и, следовательно, ваша реализация TimerTask также является потоком.

Очень простой пример Timer и TimerTask: задача выполняется по прошествии 5 seconds .

Результат:

Эта простая программа иллюстрирует следующие основные части реализации и планирования задачи, которая будет выполняться потоком таймера:

  • Реализуйте собственный подкласс TimerTask . Метод run содержит код, выполняющий задачу. В этом примере подкласс называется CrunchifyReminder.
  • Создайте поток, создав экземпляр класса Timer .
  • Создайте экземпляр объекта TimerTask ( new CrunchifyReminder() ).
  • Запланируйте выполнение задачи таймера.

Как я могу выполнять эту TimerTask повторно?

Результат:

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

  • Вызвать cancel на таймере. Вы можете сделать это из любого места в программе, например, из метода run задачи таймера.
  • Сделайте поток таймера «демоном», создав таймер следующим образом: new Timer(true) . Если в программе остались только потоки демона, программа завершается.
  • После завершения выполнения всех запланированных задач таймера удалите все ссылки на объект Timer . В конце концов, поток таймера завершится.
  • Вызовите метод System.exit , который завершает работу всей программы (и всех ее потоков).