Java如何同時運行多個線程? ExecutorService 方法

已發表: 2021-10-09
Java如何同時運行多個線程? ExecutorService 方法

我們再來看看這個例子:Java 中如何獲取任意 HTTP 端點的 Ping 狀態?

您是否注意到該示例的線程執行? 是順序的。 What if you have 500 endpoints? 我打賭你必須等待至少 5 分鐘才能得到結果。 我敢肯定這不是最好的解決方案。

怎麼辦? 正確的問題是:

  • 如何同時運行多個線程?
  • Java如何實現多線程?
  • 如何在 Java 中運行不同的線程?
  • Java – 多線程編程教程在哪裡?
  • 線程:如何使用多個線程來加速處理?

ExecutorService Approach是您的答案。

一個 Executor,它提供了管理終止的方法和可以生成 Future 以跟踪一個或多個異步任務的進度的方法。

可以關閉 ExecutorService,這將導致它拒絕新任務。 提供了兩種不同的方法來關閉 ExecutorService。 shutdown()方法將允許先前提交的任務在終止之前執行,而shutdownNow()方法阻止等待的任務啟動並嘗試停止當前正在執行的任務。

終止後,執行者沒有正在執行的任務,沒有等待執行的任務,也沒有新的任務可以提交。 應關閉未使用的 ExecutorService 以允許回收其資源。

方法 submit 通過創建和返回可用於取消執行和/或等待完成的 Future 擴展了基本方法Executor.execute ( java.lang.Runnable )。 方法invokeAnyinvokeAll執行最常用的批量執行形式,執行一組任務,然後等待至少一個或全部完成。 (類 ExecutorCompletionService 可用於編寫這些方法的自定義變體。)

Executors 類為此包中提供的執行器服務提供工廠方法。

  • java - ExecutorService,如何等待所有任務完成?
  • Java ExecutorService 指南
  • Java線程池——ExecutorService解釋

下面是一個簡單的 Java 示例,它解釋了usage of ExecutorService

輸出:

現在檢查結果。

它應該在幾秒鐘內。 我希望你覺得這有幫助。 嘗試多次運行此程序,您可能會看到不同的結果,因為所有線程都在並行執行,並且誰獲得了快速結果,您將在 Eclipse 控制台中看到結果。

如有任何疑問,請告訴我。