Home >Java >javaTutorial >How to Efficiently Await Task Completion Using ExecutorService?

How to Efficiently Await Task Completion Using ExecutorService?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-14 04:41:09340browse

How to Efficiently Await Task Completion Using ExecutorService?

ExecutorService: Await Task Completion

When leveraging ExecutorService, a developer may encounter a need to pause execution until all assigned tasks are complete. This inquiry explores the simplest approach for achieving this objective.

Question:

Execute a multitude of computational tasks, one per core, and pause execution until their completion. Current implementation utilizes ExecutorService.execute() and es.wait(), but faces an IllegalMonitorStateException.

Answer:

Employ ExecutorService.invokeAll(), a straightforward solution that accomplishes the desired functionality with a single line of 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() pauses execution until all tasks are completed, rendering manual shutdown and awaitTermination() unnecessary. This approach aligns with reusable ExecutorService instances across multiple executions.

For further exploration of related topics, consult these references:

  • [SO: Await Thread Completion](URL)
  • [SO: Thread Return Values](URL)
  • [SO: invokeAll() and Collection>](URL)
  • [SO: Synchronization Considerations](URL)

The above is the detailed content of How to Efficiently Await Task Completion Using ExecutorService?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn