利用 ExecutorService 時,開發人員可能需要暫停執行,直到所有指派的任務完成。本次調查探討了實現這一目標的最簡單方法。
問題:
執行大量計算任務,每個核心一個,並暫停執行直至完成。目前實作利用 ExecutorService.execute() 和 es.wait(),但面對 IllegalMonitorStateException。
答案:
使用ExecutorService.invokeAll(),一個簡單的解決方案只需一行即可完成所需的功能code:
List<Callable<Object>> todo = new ArrayList<Callable<Object>>(singleTable.size()); for (DataTable singleTable: uniquePhrases) { todo.add(Executors.callable(new ComputeDTask(singleTable))); } List<Future<Object>> answers = es.invokeAll(todo);
invokeAll() 暫停執行,直到所有任務完成,無需手動關閉和awaitTermination()。此方法與跨多個執行的可重複使用 ExecutorService 實例保持一致。
要進一步探討相關主題,請參考以下參考資料:
以上是如何使用ExecutorService高效等待任務完成?的詳細內容。更多資訊請關注PHP中文網其他相關文章!