首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

J2SE 5.0 多執行緒編程利器:Future、FutureTask 與 ThreadPoolExecutor 深度解析

     編輯:Java 程式設計入門

一、Future 與 FutureTask:非同步運算的回傳值解決方案

早期 Java 版本中,查詢執行緒狀態或從 run() 方法(返回 void)獲取回傳值極其困難,程式設計師需編寫大量樣板碼。J2SE 5.0 引入 Future 介面與 FutureTask 類別,優雅解決此問題。

  • Future 介面:提供檢查計算是否完成(isDone())、取消計算(cancel())、獲取結果(get())等方法。若計算未完成,get() 會阻塞直到完成。
  • FutureTask 類別:實作 Future 介面,可包裝 Callable 或 Runnable,是最常用的具體實作。

程式碼示例:字串反轉任務

FutureTask<String> future = new FutureTask<>(new MyStringReverser(input));
new Thread(future).start();

// 主執行緒輪詢檢查
while (!future.isDone()) {
    System.out.println("Task not yet completed.");
    try { Thread.sleep(500); } catch (InterruptedException ie) { ... }
}

// 獲取結果
System.out.println("Here is result... " + future.get());

二、ThreadPoolExecutor:打造高效能伺服器的核心

ThreadPoolExecutor 提供豐富配置參數,可構建類企業級 EJB 伺服器的執行緒池:

  • 核心與最大執行緒數:corePoolSize 与 maximumPoolSize。設定相同值得固定大小池;將最大值設為 Integer.MAX_VALUE 可支援任意並發。
  • 依需求建立:預設僅在新任務提交時建立核心執行緒,亦可用 prestartCoreThread() 或 prestartAllCoreThreads() 預啟動。
  • 存活時間:當執行緒數超過核心數且閒置超過 keepAliveTime 時會被終止。
  • 任務佇列策略:
    1. 執行緒數 < corePoolSize → 新增執行緒,不入佇列。
    2. 執行緒數 ≥ corePoolSize → 入佇列,不新增執行緒。
    3. 佇列滿 → 新增執行緒(除非超過 maximumPoolSize,則拒絕任務)。
  • Hook 方法:beforeExecute()、afterExecute() 允許子類別在任務執行前後插入邏輯(如監控、日誌)。

三、並發集合:為多執行緒環境設計的線程安全容器

JDK 5.0 提供三大並發集合實作:

  • ConcurrentHashMap:高併發下的 Map,支援可調整並發級別的檢索與更新,完全線程安全。
  • CopyOnWriteArrayList / CopyOnWriteArraySet:寫入時複製底層陣列,讀取極快(無鎖),寫入較慢,適合「讀多寫少」場景。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved