Я разрабатываю таймер обратного отсчета с TimeTask в Java EE. Событие прикрепляется к нажатию кнопки (старт/стоп):Retake TimeTask поток после класса был разрушен
this.timer = new Timer("taskname");
this.timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
if (remainTime <= 0) {
stopTimer();
} else {
remainTime--;
}
saveCurrentTimeOnDb(remainTime);
}
}, 1000, 1000);
private void stopTimer() {
if (timer != null) {
this.timer.cancel();
this.timer.purge();
}
}
значение таймера показывает на этикетке, размещенной на макете.
Это работает нормально. Проблема возникает при перезагрузке страницы. Я хочу вернуть поток, который уже запущен, вместо этого класс создает новый поток, а часы работают 2x быстро.
Я пытался сделать что-то вроде этого:
Thread threadTimer = getThreadByName("taskname");
if (threadTimer != null) { // thread exists
threadTimer.interrupt(); // destroying it
currentTime = getCurrentTimeFromDb();
createNewTimer(currentTime); // creates a new thread
}
Таймер часов сохраняется на БД каждую секунду (это требование системы), так что я могу взять текущее время от него. Я пытаюсь отменить старый поток и создать новый, используя часы, которые у меня уже есть.
Проблема заключается в следующем: threadTimer.interrupt() не разрушает поток таймера, поэтому, когда я создаю новый таймер, я снова запускаю два потока. Как я могу это исправить?
My Thread.interrupt() не выбрасывает исключение InterruptedException ... – aseolin