首頁 > Java > java教程 > 在繼續執行 ExecutorService 之前如何確保所有任務都已完成?

在繼續執行 ExecutorService 之前如何確保所有任務都已完成?

Linda Hamilton
發布: 2024-11-28 08:14:13
原創
886 人瀏覽過

How Can I Ensure All Tasks Complete Before Proceeding with an ExecutorService?

ExecutorService - 等待任務完成的解決方案

當處理大量需要並發執行的計算任務時,它是重要的是要有一個機制來等待所有任務完成。這可確保只有在所有任務完成後才能執行後續操作。

在您的範例中,您嘗試使用 ExecutorService.wait() 來實現此目的,您遇到了 IllegalMonitorStateException。出現此錯誤是因為 wait() 應該在等待物件的固有鎖時使用,這在這種情況下不適用。

最簡單的解決方案是利用 ExecutorService.invokeAll()。此方法採用 Callable 任務的集合,並行執行它們,並傳回 Future 物件的清單。每個 Future 代表特定任務的結果。預設情況下,invokeAll() 將阻塞,直到所有任務完成後才傳回 Future 物件清單。

以下是修改程式碼的方法:

ExecutorService es = Executors.newFixedThreadPool(2);
List<Callable<Object>> tasks = new ArrayList<>();

for (DataTable singleTable : uniquePhrases) {
    tasks.add(Executors.callable(new ComputeDTask(singleTable)));
}

List<Future<Object>> results = es.invokeAll(tasks);
登入後複製

在此更新的程式碼中,ExecutorService .invokeAll() 將等待所有任務完成,讓您可以自信地繼續後續操作。

以上是在繼續執行 ExecutorService 之前如何確保所有任務都已完成?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板