TimerTask停止在Tomcat Servlet中运行的原因可能是什么
我怀疑异常可能会使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
}
}
}
stacktrace的结尾将是:
at java.util.TimerThread.mainLoop(Timer.java:512)at java.util.TimerThread.run(Timer.java:462)
因此,临时解决方案是抓住一切…长期解决方案是,随着BalusC的提出,转向更好的调度。
回答:
当抛出未捕获的异常时,TimerTasks会死亡(无论它是否在tomcat中运行都无关)。解决此问题的最简单方法是在run方法中捕获RuntimeException,如果需要,请登录并继续。
还建议也捕获Throwables并在重新抛出之前对其进行记录,以便可以在日志中看到stacktrace,如下所示:
try{ doRun();
}catch (RuntimeException e){
logger.error("Uncaught Runtime Exception",e);
return; // Keep working
}catch (Throwable e){
logger.error("Unrecoverable error",e);
throw e;
}
以上是 TimerTask停止在Tomcat Servlet中运行的原因可能是什么 的全部内容, 来源链接: utcz.com/qa/409347.html