[英]What can be the reasons for a TimerTask to stop running in a 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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.