簡體   English   中英

TimerTask停止在Tomcat Servlet中運行的原因可能是什么

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM