Синхронизация потоков java с помощью timer и timerTask

java.util.timer  - это класс, который может быть использован для планирования (java  scheduler) задач, связанных с потоком для выполнения в будущем. Задачи могут выполняться один или несколько раз через равные промежутки времени.

Несколько потоков могут совместно использовать один экземпляр timer при условии синхронизации потоков java.

java.util.TimerTask является абстрактным классом, реализующим Runnable. Нам нужно наследоваться от этого класса, чтобы создать наш TimerTask который будет запланирован с помощью метода timer. Параметр timer использует методы wait и notify для планирования процессов.

Вот пример реализации timer:

import java.awt.Toolkit; 
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TimerTask{

static Toolkit toolkit;

public TimerTask(){
toolkit = Toolkit.getDefaultToolkit();
TimerTask timerTask = new executetask();
//запускаем timertask как поток deamon
Timer timer = new Timer(true);
//запланировать задачу для будущего выполнения в заданное время
timer.schedule(timerTask, 0, 1*1000);
System.out.println("TimerTask destarted");
//отмена через 10s
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
timer.cancel();
System.out.println("TimerTask остановлен");
}

class executetask extends TimerTask {
@Override
public void run() {
System.out.println("Starts: "+new Date());
try {
//2 секунды для выполнения задачи
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
toolkit.beep();
System.out.println("Завершается: "+new Date());
}
}

public static void main(String args[]){
new TimerTask();
}
}
Output

расписание задач таймер java

Это простой пример таск-менеджера. Таймер запустится  Задача  каждые 1 секунду (1000 миллисекунд) повторяется с фиксированным интервалом. с помощью метода schedule() который принимает в качестве аргументов:
  • La  Задача  по заказу.
  • Время до Задача  будет казнено. в миллисекундах.
  • Время между последовательными выполнениями Задачи  или частота выполнения в миллисекундах.
Результаты компиляции этой программы показывают, что таймер ожидает завершения запущенного процесса, чтобы он мог перейти к следующему в очереди.

Метод Timer.cancel() отменяет таймер и все Задачи  в очереди. Как только это будет сделано, это Поток демона также завершается.

References:
Oracle: Timer class
Oracle:  timerTask class
java2s:Toolkit beep
javapoint: демон-поток