首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 線程池實戰:並行計算簡單數學表達式

     編輯:程式設計疑難解答

問題背景

有一道經典練習題:使用 4 個線程並行計算表達式 (1234*7856)+(50000/5432)+(2^10)+(9834-298*345) 的結果。題目提示使用線程池實現。

優雅的解決方案

雖然可以定義四個獨立的 Runnable 任務,但更簡潔的方式是利用 ExecutorService 提交 4 個 Callable 任務,每個任務計算一個加數,最後主線程通過 Future.get() 彙總結果。

代碼示例

ExecutorService executor = Executors.newFixedThreadPool(4);
List> futures = new ArrayList<>();

futures.add(executor.submit(() -> 1234 * 7856));
futures.add(executor.submit(() -> 50000 / 5432));
futures.add(executor.submit(() -> (int) Math.pow(2, 10)));
futures.add(executor.submit(() -> 9834 - 298 * 345));

int sum = 0;
for (Future f : futures) {
    sum += f.get(); // 阻塞等待結果
}
executor.shutdown();
System.out.println("總和: " + sum);

專家點評

雖然這能演示線程池用法,但專家指出:這根本不是演示多線程的好場景。任務極其輕量,線程創建、調度、上下文切換的開銷遠大於計算本身,如同「在田徑場讓噴氣飛機演示飛行」。真實場景應為耗時 I/O 或複雜計算任務。

最佳實踐

  • 使用 ThreadPoolExecutor 自定義核心參數,而非 Executors 預設工廠。
  • 任務粒度要足夠大,以抵消線程管理開銷。
  • 善用 CompletableFuture 進行組合式異步編程(Java 8+)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved