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

回到顶部