傳統多執行緒程式設計充滿陷阱:競態條件、死鎖、活鎖、記憶體可見性問題等,錯誤往往難以重現。J2SE 5.0 的 java.util.concurrent 套件針對這些痛點,提供了一套經實戰驗證的高階工具,讓開發者能以更安全、更直觀的方式構建併發應用。
將「任務提交」與「執行策略」解耦,支援同步、非同步、定時、週期性等多種執行模式。開發者只需實作 Runnable 或 Callable,交由執行器處理排程與資源管理。
shutdown():停止接受新任務,等待現有任務完成shutdownNow():嘗試中斷執行中任務,返回未執行任務列表awaitTermination():阻塞等待執行緒池終止submit():提交可回傳結果的任務,獲得 Future提供 schedule()、scheduleAtFixedRate()、scheduleWithFixedDelay() 三種調度方式,精確控制任務觸發時機。
FutureTask task = new FutureTask<>(() -> {
// 耗時運算
return "結果";
});
executor.execute(task);
// 其他工作...
String result = task.get(); // 阻塞直到完成
關鍵配置策略:
corePoolSize == maximumPoolSizemaximumPoolSize = Integer.MAX_VALUE 搭配 SynchronousQueueCallerRunsPolicy 等策略降級處理prestartAllCoreThreads() 減少首次任務延遲| 類別 | 適用場景 | 特點 |
|---|---|---|
| ConcurrentHashMap | 高並發快取、計數器 | 分段鎖,弱一致性迭代器 |
| CopyOnWriteArrayList | 事件監聽器列表、配置快照 | 寫時複製,迭代器不拋 ConcurrentModificationException |
| Semaphore | 資源池限流、連接控制 | 許可證機制,公平/非公平模式 |
| CountDownLatch | 啟動同步、分階段等待 | 一次性倒數,不可重置 |
| CyclicBarrier | 並行計算階段同步 | 可重置,支援柵欄動作 |
Executors 工廠方法建立標準執行緒池,特殊需求再自訂 ThreadPoolExecutorCompletableFuture(Java 8+)進行非同步組合,避免阻塞式 get()CopyOnWrite 系列,寫多用 ConcurrentHashMap 或鎖分段CountDownLatch,循環同步用 CyclicBarrier,資源限流用 Semaphore掌握 J2SE 5.0 並發套件,是邁向高併發 Java 開發的關鍵一步。它不只是工具庫,更是併發設計模式的標準化實踐。