頻繁創建/銷毀線程開銷大,且無限制創建會耗盡系統資源導致 OOM。線程池三大核心優勢:
new ThreadPoolExecutor(
corePoolSize, // 核心線程數
maximumPoolSize, // 最大線程數
keepAliveTime, // 非核心線程空閒存活時間
unit, // 時間單位
workQueue, // 任務隊列
threadFactory, // 線程工廠
handler // 拒絕策略
);
prestartAllCoreThreads() 可預創建。ArrayBlockingQueue:有界數組隊列,FIFOLinkedBlockingQueue:無界鏈表隊列,FIFO,吞吐量高,Executors.newFixedThreadPool() 默認使用SynchronousQueue:不存儲元素,直接移交,Executors.newCachedThreadPool() 默認使用PriorityBlockingQueue:優先級隊列AbortPolicy 拋異常。可選:CallerRunsPolicy(調用者執行)、DiscardOldestPolicy、DiscardPolicynewFixedThreadPool(n):固定大小,LinkedBlockingQueuenewCachedThreadPool():可緩存,SynchronousQueue,適合大量短任務newSingleThreadExecutor():單線程串行newScheduledThreadPool(n):定時/周期任務,替代 Timerpool.execute(new Runnable() { public void run() { /* 任務 */ } });
ExecutorService executor = Executors.newCachedThreadPool();
List> futures = new ArrayList<>();
for (int i = 0; i < 10; i++) {
futures.add(executor.submit(new Callable() {
public String call() { return "Result-" + i; }
}));
}
for (Future f : futures) {
System.out.println(f.get()); // 阻塞獲取結果
}
executor.shutdown();
| 方法 | 原理 | 特點 |
|---|---|---|
| shutdown() | 設置狀態 SHUTDOWN,中斷無任務線程,不接受新任務,等待隊列任務完成 | 溫和關閉,推薦常規使用 |
| shutdownNow() | 設置狀態 STOP,嘗試中斷所有線程(含執行中),返回未執行任務列表 | 暴力關閉,任務可能未完成 |
調用任意關閉方法後 isShutdown() 返回 true;所有任務結束後 isTerminated() 返回 true。

workQueueRejectedExecutionHandler 拒絕策略
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2);
executor.scheduleAtFixedRate(task1, 0, 1000, TimeUnit.MILLISECONDS);
executor.scheduleAtFixedRate(task2, 0, 4000, TimeUnit.MILLISECONDS);
多線程並行執行,單任務異常不影響其他任務,生產環境強烈推薦替代 Timer。