ThreadPoolExecutor 是 Java 並發包中線程池的核心實現類。簡單來說,線程池是一個管理線程集合的容器,它允許一定數量的線程並發運行。當提交的任務超過線程池容量時,多餘任務會進入阻塞隊列等待。線程池通過調度策略和拒絕策略對任務進行全生命週期管理。

以下是 ThreadPoolExecutor.java 中關鍵字段的定義與作用:
private final HashSet<Worker> workers = new HashSet<Worker>();
workers 是一個 HashSet<Worker> 集合,每個 Worker 對象封裝了一個線程。線程啟動後會從任務隊列獲取任務執行,任務完成後會繼續從阻塞隊列獲取下一個任務。這實現了線程複用,避免頻繁創建銷燬線程的開銷。
private final BlockingQueue<Runnable> workQueue;
當線程池中運行的線程數達到上限時,新提交的任務會被放入此阻塞隊列等待。不同的隊列實現(如 LinkedBlockingQueue、ArrayBlockingQueue、SynchronousQueue)會產生不同的線程池行為特徵。
private final ReentrantLock mainLock = new ReentrantLock();
用於同步訪問線程池的核心數據結構(如 workers 集合、線程池狀態變更等),保證線程安全。
private volatile int corePoolSize;
private volatile int maximumPoolSize;
這兩個參數控制線程池的動態伸縮:
corePoolSize:直接創建新線程處理任務corePoolSize 但 < maximumPoolSize:僅當隊列滿時創建新線程maximumPoolSize 設為 Integer.MAX_VALUE:無界線程池(如 CachedThreadPool)private volatile long keepAliveTime;
private volatile boolean allowCoreThreadTimeOut;
非核心線程空閒超過 keepAliveTime 會被回收。若 allowCoreThreadTimeOut=true,核心線程也會在空閒時超時退出。
private volatile ThreadFactory threadFactory;
統一創建線程,可自定義線程名稱前綴、優先級、守護線程屬性等,便於問題排查。
private volatile RejectedExecutionHandler handler;
當隊列滿且線程數達到最大值時,新任務會觸發拒絕策略。內置四種策略:AbortPolicy(拋異常)、CallerRunsPolicy(調用者執行)、DiscardPolicy(丟棄)、DiscardOldestPolicy(丟棄最舊任務)。


圖解說明:
這種「生產者-消費者」模式配合線程複用,是線程池高效處理大量併發任務的關鍵。