為什么開發中要使用線程池,而不是直接創建線程(如控制線程數量、復用線程、降低開銷)?
開發中優先使用線程池而非直接創建線程,核心原因是線程池能優化線程管理、降低資源消耗、提高系統穩定性,而直接創建線程存在難以解決的缺陷,具體如下:
-
控制線程數量,避免資源耗盡:
直接創建線程時,若頻繁執行任務(如每秒發起多個網絡請求),會導致線程數量急劇增加。每個線程需占用一定內存(如 Java 線程默認棧大小 1MB)和 CPU 時間片,過多線程會:- 消耗大量內存,可能導致 OOM(內存溢出)。
- 引發頻繁的 CPU 上下文切換(線程切換時保存/恢復狀態的開銷),降低系統吞吐量。
線程池通過corePoolSize
(核心線程數)和maximumPoolSize
(最大線程數)控制并發線程數量,超出最大線程數的任務會進入隊列等待,避免線程爆炸。例如,設置最大線程數為 5,即使有 100 個任務,也只會同時運行 5 個線程,其余在隊列中等待。
-
復用線程,降低創建/銷毀開銷:
線程的創建和銷毀是昂貴的操作:創建線程需調用系統內核函數(如pthread_create()
),分配棧空間、注冊線程等;銷毀線程需回收資源、通知內核。每次任務都新建線程會導致大量時間浪費在創建/銷毀上,尤其在高頻任務場景(如 RecyclerView