2017-08-29 96 views
2

我是一個正在解決這個ScheduledThreadPoolExecutor問題的新手程序員。如何保證ScheduledThreadPoolExecutor的調度不會突然死亡?

在使用一些Google搜索時,我知道如何使用afterExecute方法處理來自Runnable()部分的異常。現在它歸結爲這一點。

如果ScheduledThreadPoolExecutor的scheduleAtFixedRate()方法發生錯誤並且線程突然停止,該怎麼辦?

換句話說,如果該 誤差是執行器類,而不是從Runnable的 實施?

有什麼辦法,我可以找出錯誤(重啓整個調度)& &處理呢?

謝謝

回答

0

如果有什麼錯誤來自執行人類,而不是從Runnable的 實施?

該錯誤不是來自執行者類。

有什麼辦法,我可以找出錯誤& &處理(通過 重啓整個調度)?

是的,你可以使用不同的技術來識別錯誤並重新啓動ScheduledExecutorService,但真正的問題應該是:是正確的事是什麼?

如果您可以處理Runnable中的錯誤,那麼最好在那裏處理它,而不是重新啓動Executor。

+0

感謝您的評論。 那麼你是說錯誤只來自Runnable的實現,所以我不需要打擾? 如果您看到https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html#newSingleThreadScheduledExecutor(),那麼似乎會出現類自身的錯誤,singlethreadexecutor具有有些事情會因調度自身的失敗而恢復工作,而不是來自可運行的實現? – sanghyun

+0

['ScheduledExecutorService']可以引發3個異常(https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html#scheduleAtFixedRate(java.lang。 Runnable,%20long,%20long,%20java.util.concurrent.TimeUnit)),並且它們都是由於Runnable的不正確使用或不當行爲而發生的。 – alfasin

+0

@sangghyun一個具體的例子在這裏會有所幫助 – alfasin