當線程池中的一個線程出現異常,那它該何去何從

1、execute()方法是不會有返回值的,當任務的執行方式是execute時,可以看到堆棧異常的輸出,因爲該方法內部將異常拋出。而當執行方式是submit時,堆棧異常沒有輸出,它不拋出異常而是將異常進行了保存,丟到了Future對象中,返回Future對象。調用Future.get()方法時,可以捕獲到異常,可以讓我們更容易的處理異常。(題外話— execute只能接受Runnable類型的任務,submit不管是Runnable還是Callable類型的任務都可以接受)

2、線程池中某個線程出現異常,它是否會影響線程池中的其它線程?
答案是不會,不會影響線程池裏面其他線程的正常執行,可以自行驗證。

3、出現異常的該線程何去何從?用完之後是否會重新進入線程池
答案是不會重新進入線程池,線程池會把這個線程移除掉,並創建一個新的線程放到線程池中。

參考-有的線程它死了,於是它變成一道面試題

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