我有一個非常簡單的Runnable,我希望每30秒執行一次 - 請記住,這僅僅是這個問題的簡單示例,而不是實際的要點在現實中使用這個。在Java中調度循環任務而不停止未經檢查的異常
@Override
public void run() {
System.out.println("Throwing an unchecked exception on purpose...");
int abc = 123 - 123;
int def = 123/abc;
}
我用定時器和TimerTask,但遇到了一個問題:每當TimerTask的提出了一個未經檢查的異常,該任務的任何後續執行將被取消;因此上面的任務實際上只會運行一次,因爲它會通過0 Exception拋出未經檢查的除法。
據我所知,ScheduledThreadPoolExecutor具有完全相同的「功能」,至少根據官方的Java API文檔「如果任務的任何執行遇到異常,後續執行被抑制」。
在Java中是否有任何標準方法使Timer或ScheduledThreadPoolExecutor在引發未檢查異常時不抑制後續執行?
非常感謝。
您需要使用try/catch語句並捕獲異常。 – 2012-08-03 16:41:22
@ DMB3我可能會很慢,但爲什麼捕捉這個RuntimeException將是一件壞事? – Eugene 2012-08-03 16:51:05
特定的Runnable中的代碼可能在項目之外實現,因此我們無法訪問代碼以在該處捕獲異常。 Jon Skeet提出的包裝解決方案顯然完成了這一點。 – DMB3 2012-08-03 17:04:11