早期 Java 版本中,查詢執行緒狀態或從 run() 方法(返回 void)獲取回傳值極其困難,程式設計師需編寫大量樣板碼。J2SE 5.0 引入 Future 介面與 FutureTask 類別,優雅解決此問題。
isDone())、取消計算(cancel())、獲取結果(get())等方法。若計算未完成,get() 會阻塞直到完成。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 提供豐富配置參數,可構建類企業級 EJB 伺服器的執行緒池:
corePoolSize 与 maximumPoolSize。設定相同值得固定大小池;將最大值設為 Integer.MAX_VALUE 可支援任意並發。prestartCoreThread() 或 prestartAllCoreThreads() 預啟動。keepAliveTime 時會被終止。beforeExecute()、afterExecute() 允許子類別在任務執行前後插入邏輯(如監控、日誌)。JDK 5.0 提供三大並發集合實作: