2016-06-19 49 views
2

當一個線程由於異常而死的時候,這個線程會發生什麼?如果它在一個線程池中,它是否會產生一個新的線程?我對scala中的ExecutionContext感興趣,但是由於ExecutionContext包裝了一個java線程池,我認爲Java用戶也會知道答案。例如,如果我創建一個包含FixedThreadPool(100)的ExecutionContext,如果一個線程死亡,他的線程池是否會替換線程?在ExecutionContext和/或Java線程池中是否替換了死線程?

+4

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool-int- –

+2

*如果任何線程之前執行期間終止由於故障如果需要執行後續任務,則新的執行將取代它。* –

回答

5

線程本身無法在線程死後產生新線程,但是線程池可以替換它。例如,由Executors.newFixedThreadPool()創建的線程池將在需要時替換死線程。從Executors.newFixedThreadPool()的文檔:

「如果任何線程之前 關機執行過程中,由於終止與失敗,如果需要執行 後續任務,將會有新取而代之」

+0

這個新線程將從第一個執行任務還是繼續執行死線程已停止的任務? – masSdev