new ThreadPoolExecutor(
corePoolSize, // 核心線程數
maximumPoolSize, // 最大線程數
keepAliveTime, // 非核心線程閒置存活時間
unit, // 時間單位
workQueue, // 任務阻塞隊列
threadFactory, // 線程工廠
handler // 拒絕策略
);
workQueue。RejectedExecutionHandler 拒絕策略。
| 策略 | 行為 |
|---|---|
| AbortPolicy (預設) | 拋出 RejectedExecutionException |
| CallerRunsPolicy | 由調用者線程執行任務 |
| DiscardOldestPolicy | 丟棄隊列最舊任務,嘗試重新提交 |
| DiscardPolicy | 直接丟棄,不拋異常 |
可自行實作 RejectedExecutionHandler 介面自定義策略(如記錄日誌、持久化)。
| 隊列 | 特性 | 適用場景 |
|---|---|---|
| ArrayBlockingQueue | 有界陣列、FIFO、單鎖 | 固定大小、公平性要求高 |
| LinkedBlockingQueue | 鏈表、FIFO、雙鎖 (put/take)、可無界 | 高吞吐、Executors.newFixedThreadPool 預設 |
| PriorityBlockingQueue | 優先級排序、無界 | 任務需按優先級執行 |
| DelayQueue | 延遲獲取、無界、基於 PriorityQueue | 定時任務、快取過期清理 |
| SynchronousQueue | 不儲存元素、直接移交、公平/非公平 | Executors.newCachedThreadPool 預設、生產消費速度匹配 |
| LinkedTransferQueue | 實作 TransferQueue、可選直接移交 | 高並發生產消費 |