Синхронизация потоков java с помощью timer и timerTask
java.util.timer - это класс, который может быть использован для планирования (java scheduler) задач, связанных с потоком для выполнения в будущем. Задачи могут выполняться один или несколько раз через равные промежутки времени.Несколько потоков могут совместно использовать один экземпляр timer при условии синхронизации потоков java.
java.util.TimerTask является абстрактным классом, реализующим Runnable. Нам нужно наследоваться от этого класса, чтобы создать наш TimerTask который будет запланирован с помощью метода timer. Параметр timer использует методы wait и notify для планирования процессов.
Вот пример реализации timer:
import java.awt.Toolkit;Output
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();
}
}
Это простой пример таск-менеджера. Таймер запустится Задача  каждые 1 секунду (1000 миллисекунд) повторяется с фиксированным интервалом. с помощью метода schedule() который принимает в качестве аргументов:
- La Задача  по заказу.
- Время до Задача  будет казнено. в миллисекундах.
- Время между последовательными выполнениями Задачи  или частота выполнения в миллисекундах.
Метод Timer.cancel() отменяет таймер и все Задачи  в очереди. Как только это будет сделано, это Поток демона также завершается.
References:
Oracle: Timer class
Oracle: timerTask class
java2s:Toolkit beep
javapoint: демон-поток