我使用ExecutorService來執行我的邏輯。如下所示,run方法應該在無限循環中執行。簡而言之,run方法是一個消息使用者,它應該從隊列中移除消息並處理消息。但是,doSomething()方法遇到一個異常,並且永遠不會返回。經過分析,我意識到doSomething()方法中有一個NullPointer。雖然我已經處理了這個異常,但我如何確保循環永遠不會終止 - 儘管有任何運行時異常。我無法承擔我的Runnable任務無法工作。它會停止整個功能。從ExecutorService中的異常中恢復
ExecutorService service = Executors.newSingleThreadExecutor()
service.submit(new Runnable(){
public void run(){
while(true){
doSomething();
}
}
})
好像ExecutorService的濫用。爲什麼不創建自己的線程? – dnault 2014-12-03 10:47:30
@dnault爲什麼這是一個濫用?這不是一種更好的做事方式嗎? – 2014-12-03 11:14:38
也許「濫用」太過分了。但是ExecutorService在這裏沒有添加任何值。當你需要運行幾個任務時,ExecutorService通常被用作抽象,並且提交任務給服務的代碼並不關心它們如何執行的細節。但是在這裏你有一個永遠循環的單一任務。任何試圖向執行者提交其他任務的嘗試都將永遠阻塞,因爲循環任務從未結束。 – dnault 2014-12-03 21:19:39