new Thread和newSingleThreadExecutor()的區別

我們應用 newSingleThreadExecutor 去單線程的去運行一個東西的邏輯爲:
在這裏插入圖片描述
在這裏插入圖片描述
檔線程i=5時 它會報錯,但是隻是這個線程會報錯。不影響其它線程繼續運行

二當我們採用常規方式運行程序的方式爲

ffor(int i=0;i<20;i++) {
new Thread(new ListeningTask()).start();
}
其實會啓動很多的線程去運行程序。

這種實現方式其實有很多弊端
a. 每次new Thread新建對象性能差。
b. 線程缺乏統一管理,可能無限制新建線程,相互之間競爭,及可能佔用過多系統資源導致死機或oom。 c. 缺乏更多功能,如定時執行、定期執行、線程中斷。 相比new Thread,Java提供的四種線程池的好處在於: a. 重用存在的線程,減少對象創建、消亡的開銷,性能佳。 b. 可有效控制最大併發線程數,提高系統資源的使用率,同時避免過多資源競爭,避免堵塞。 c. 提供定時執行、定期執行、單線程、併發數控制等功能。