頻繁創建/銷毀線程開銷大:T = T1(創建) + T2(執行) + T3(銷毀)。若 50,000 請求各自創建線程,T1+T3 佔比極高。線程池將創建/銷毀移至啟動/關閉階段,運行期**複用固定數量線程**,大幅降低延遲、提升吞吐。
wait()。execute()、finish()、狀態查詢。Vector/BlockingQueue),生產者-消費者模式。
synchronized (workThreadVector) {
for (int j = 0; j < poolSize; j++) {
threadNum++;
WorkThread wt = new WorkThread(taskVector, threadNum);
workThreadVector.add(wt);
}
}
synchronized (taskVector) {
taskVector.add(task);
taskVector.notifyAll(); // 喚醒等待的 WorkThread
}
public void run() {
while (!shutdown) {
Task task = null;
synchronized (taskVector) {
while (taskVector.isEmpty() && !shutdown) {
taskVector.wait(); // 空閒等待
}
if (shutdown) break;
task = (Task) taskVector.remove(0);
}
if (task != null) {
task.execute(); // 執行任務
task.finish(); // 收尾
}
}
}
測試環境:Win2000/JDK1.3.1 PC 及 Solaris/JDK1.3.1 Sun 伺服器。固定 5,000 任務,變化池大小;固定池大小 16,變化任務數。


| 策略 | 核心思想 | 代表產品 | 關鍵控制點 |
|---|---|---|---|
| 動態擴縮容 | 監控隊列積壓/執行時間,批量增減線程,設定上下限 | Jini TaskManager、SQL Server (1024 初始、32767 上限) | 擴容觸發閾值、縮容冷卻時間、批量大小 |
| 統計學定尺寸 | 依據尖峰 QPS、任務耗時分布、SLA 計算最優固定尺寸 | MTS (固定 100) | 歷史負載分析、壓測驗證、定期複核 |
| 多池隔離 | 依優先級/業務域/租戶劃分獨立池,避免互相擠佔 | COM+ | 池間資源配额、優先級搶佔、熔斷降級 |
生產代碼請直接使用 java.util.concurrent:
ExecutorService pool = Executors.newFixedThreadPool(16); // 或 newCachedThreadPool()
pool.submit(() -> { /* task */ });
pool.shutdown(); // 優雅關閉
內建拒絕策略、監控指標、CompletableFuture 異步編排,無需手寫。