【線程池】線程池的線程遇到異常後去哪裏?怎麼處理?

1 四種解決任務代碼拋異常的方案:

  • 在我們提供的Runnable的run方法中捕獲任務代碼可能拋出的所有異常,包括未檢測異常
  • 使用ExecutorService.submit執行任務,利用返回的Future對象的get方法接收拋出的異常,然後進行處理
  • 重寫ThreadPoolExecutor.afterExecute方法,處理傳遞到afterExecute方法中的異常
  • 爲工作者線程設置UncaughtExceptionHandler,在uncaughtException方法中處理異常

要注意的是,使用最後一種方案時,無法處理以submit的方式提交的任務

 

1.1 第一種源碼:異常會導致線程死亡,創建新的工作者加入線程池

 

 

 

1.2 第二種源碼: 工作線程還是一樣的,只是run方法是執行含有生命週期的Future對象,所以不會多次創建工作者

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章