我試圖崩潰的標準ExecutorService
這個可怕的代碼固定的線程池的線程,以測試其對異常和錯誤傳遞給ExecutorService
任務中發生了彈性:有沒有辦法無意中停止Executor的線程?
ExecutorService executorService = Executors.newFixedThreadPool(1);
executorService.execute(() -> {
throw new RuntimeException("Trying to kill the thread");
});
Thread.sleep(100);
executorService.execute(() -> {
System.out.println("still executing");
});
但第二任務打印still executing
,所以我認爲異常被捕獲或Thread
實例重新啓動。 發生了什麼?我可以相信,不管在任務內發生了什麼(小於System.exit()
),其他提交的任務將繼續由池執行嗎?
這是正確的,在這你應該閱讀的API文檔。 「如果任何線程在關閉之前的執行期間由於失敗而終止,那麼如果需要執行後續任務,則新線程將取代它的位置。池中的線程將一直存在,直到它被明確關閉。 – pvg
這不是可怕的代碼,這是一個_learning test_。如圖所示,它只是一個手動測試,但您可以將其自動化,並將其作爲某個應用程序的單元測試套件的一部分,以便記錄應用程序依賴於該行爲。 –