1 四種解決任務代碼拋異常的方案:
- 在我們提供的Runnable的run方法中捕獲任務代碼可能拋出的所有異常,包括未檢測異常
- 使用ExecutorService.submit執行任務,利用返回的Future對象的get方法接收拋出的異常,然後進行處理
- 重寫ThreadPoolExecutor.afterExecute方法,處理傳遞到afterExecute方法中的異常
- 爲工作者線程設置UncaughtExceptionHandler,在uncaughtException方法中處理異常
要注意的是,使用最後一種方案時,無法處理以submit的方式提交的任務
1.1 第一種源碼:異常會導致線程死亡,創建新的工作者加入線程池
1.2 第二種源碼: 工作線程還是一樣的,只是run方法是執行含有生命週期的Future對象,所以不會多次創建工作者