Java EEでTimeTaskを使用してカウントダウンタイマーを作成しています。ボタンのクリック(開始/停止)にイベントが添付されます。クラスを破棄した後の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();
}
}
レイアウトに配置されたラベルにタイマー値が表示されています。
これは問題なく動作しています。ページをリロードすると問題が発生します。私は既に開始されているスレッドを取り返したいのではなく、クラスが新しいスレッドを作成していて、クロックが2倍速く実行されています。
私はこのような何かをしようとした:
Thread threadTimer = getThreadByName("taskname");
if (threadTimer != null) { // thread exists
threadTimer.interrupt(); // destroying it
currentTime = getCurrentTimeFromDb();
createNewTimer(currentTime); // creates a new thread
}
クロックタイマーは(これはシステム要件である)DB上の毎秒保存されているので、私はそれから現在の時間を取ることができます。私は古いスレッドを取り消そうとしているし、私はすでに持っている時計の時間を使用して新しいものを作成します。
問題は次のとおりです。threadTimer.interrupt()はタイマースレッドを破棄しないため、新しいタイマーを作成すると2つのスレッドが再度実行されます。これをどうすれば解決できますか?
My Thread.interrupt()がInterruptedException例外をスローしていない... – aseolin