2 回答

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
當(dāng)在一個(gè)線程中拋出異常時(shí),它不會(huì)傳播到其他線程,除非你做一些事情讓它這樣做(比如使用 Future)。這里線程導(dǎo)致異常并死亡,但程序的其余部分不受影響。
執(zhí)行程序?yàn)閬G失的線程創(chuàng)建一個(gè)替換,請(qǐng)參閱 api 文檔:
創(chuàng)建一個(gè) Executor,它使用單個(gè)工作線程在無(wú)界隊(duì)列中運(yùn)行,并在需要時(shí)使用提供的 ThreadFactory 創(chuàng)建一個(gè)新線程。與其他等效的 newFixedThreadPool(1, threadFactory) 不同,返回的執(zhí)行程序保證不可重新配置以使用其他線程。
在我看來(lái),讓任務(wù)處理它們引起的異常是個(gè)好主意。否則線程會(huì)死亡,池必須啟動(dòng)一個(gè)新線程來(lái)替換它。這基本上就是評(píng)論中鏈接的文章所說(shuō)的。

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
你應(yīng)該保持返回值 Future
并使用 Future.get() 詢(xún)問(wèn)是否存在未處理的異常
添加回答
舉報(bào)