Базовый функционал класса Timer в Java. Примеры использования.

Java timer

Классы java.util.Timer и java.util.TimerTask являются стандартными классами для имплементации задачи и планирования ее выполенения. 

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

Класс TimerTask является абстрактным и поэтому нуждается в определённой имплементации. В свою очередь он имплементирует интерфейс Runnable, предоставляя дополнительные возможности многопоточности. Унаследовавшись от класса TimerTask мы должны создать свой объект задачи.

Принцип работы

Как уже было сказано выше, Timer в Java — служебный класс, который выполняет в системе определенную роль, а именно запуск программных процессов по своему расписанию. Он запускает определенный поток, работающий в фоновом режиме.

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

Класс Timer является потокобезопасным, поэтому он может использоваться без синхронизации данных. Одновременно в классе Timer может выполняться только один поток. При возникновении коллизии если потоки накладывается они становится в очередь.

Методы класса Timer в Java 

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

  • cancel() — предусмотрен для того, чтобы прерывать текущую задачу; 
  • purge() — удаляет все отмененные задачи из очереди. Если на задачу нет внешних ссылок, она автоматически становится невалидной для сборщика мусора (garbage collector); 
  • schedule (TimerTask task, long delay) — планирование задачи c отложенным запуском в милисекундах; 
  • schedule (TimerTask task, long delay, long period) — аналогичный предыдущему методу, с тем отличием, что процесс может повторяться многократно с учетом указанного периода времени в миллисекундах; 
  • schedule (TimerTask task, Date when) — планировка задания с учетом времени старта, установленным в when параметре;
  • schedule(TimerTask task, Date when, long period) — аналогичный предыдущему, но с учетом многократного повторения функции за определенный период времени, параметр period; 
  • scheduleAtFixedRate (TimerTask task, long delay, long period) —  также происходит цикличные планирование запуска задач с учётом предыдущего запуска.
  • scheduleAtFixedRate (TimerTask task, Date when, long period) — очень похож на предыдущий с разницей только в том, что указывается дата запуска.

Пример запуска отдельного таймера

class TimerTaskTest extends TimerTask {

    @Override
    public void run() {
        System.out.println("TimerTask started at:" + new Date());

        try {
            Thread.sleep(15000);
        } catch (InterruptedException e) {

        }

        System.out.println("TimerTask ended at:" + new Date());
    }


    public static void main(String args[]) {
        TimerTask timerTask = new TimerTaskTest();

        Timer timer = new Timer(true);
        timer.scheduleAtFixedRate(timerTask, 0, 15 * 1000);
        System.out.println("TimerTaskTest started");

        try {
            Thread.sleep(150000);

            timer.cancel();
            System.out.println("TimerTask canceled");

            Thread.sleep(30000);

        } catch (InterruptedException e) {

        }
    }
}

Вывод:

TimerTaskTest started
TimerTask started at:Fri Aug 20 18:58:57 EEST 2021
TimerTask ended at:Fri Aug 20 18:59:12 EEST 2021
TimerTask started at:Fri Aug 20 18:59:12 EEST 2021
TimerTask ended at:Fri Aug 20 18:59:27 EEST 2021
TimerTask started at:Fri Aug 20 18:59:27 EEST 2021
TimerTask ended at:Fri Aug 20 19:01:12 EEST 2021
TimerTask started at:Fri Aug 20 19:01:12 EEST 2021
TimerTask canceled

Related posts

Leave a Comment