我怀疑异常可能会使 TimerTask 停止运行,在这种情况下,我很可能需要第二个 timetask 来监视第一个仍在运行?
更新
感谢您的回答。我继承了这个代码,所以有点无知......
我刚刚看到,如果我在工作中抛出未捕获的异常,TimerThread 将永远停止运行。
的运行方法TimerThread
表明,如果抛出异常,我的预定线程将不再运行。
public void run() {
try {
mainLoop();
} finally {
// Someone killed this Thread, behave as if Timer cancelled
synchronized(queue) {
newTasksMayBeScheduled = false;
queue.clear(); // Eliminate obsolete references
}
}
}
堆栈跟踪的结尾将是:
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
所以临时解决方案是抓住一切……长期解决方案是像 BalusC 所说的那样进行更好的调度。