每次new Thread的時候,都會創建一個單線程,但是,我們在項目中基本都是使用線程池,本文主要整理了線程和線程池的優缺點。
new Thread的優缺點
優點:通過new Thread()創建線程的API簡單易用,結構清晰,對於執行單一的一次性任務十分便利。
缺點:
- 每次new Thread都新建對象,性能差;
- 沒有線程管理者,可能會無限制新建線程,不僅會消耗系統資源,還會降低系統的穩定性,例如占用過多的系統資源導致OOM;
- 缺乏更多功能,比如定時、定期、並發數控制等功能。
線程池的優點
合理利用線程池能夠帶來三個好處:
- 降低資源消耗。通過重復利用已創建的線程降低線程創建和銷毀造成的消耗。
- 提高響應速度。當任務到達時,任務可以不需要等到線程創建就能立即執行。
- 提高線程的可管理性。線程是稀缺資源,使用線程池可以進行統一的分配、調優和監控。
池化技術
提到線程池,就自然而然的想起了池化技術,池化技術的思想主要是提前緩存大量的資源,減少每次獲取資源的消耗,提高對資源的利用率,特別是在高並發場景這種提高更加明顯。使用池化技術緩存的資源對象有如下共同特點:
- 對象創建時間長;
- 對象創建需要大量資源;
- 對象創建后可被重復使用。
除了上述線程池使用了池化技術,對象池、內存池(Memory pool)、數據庫連接池和http連接池等也使用了。數據庫連接池比較典型的有SqlServer、Oracle和MySQL的連接池。對象池就是提前創建很多對象,將用過的對象保存起來,等下一次需要這種對象的時候,再拿出來重復使用。同樣,這么好的思想在ActiveMQ連接池中也得到了應用。