"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > How to Efficiently Wait for a List of Futures and Handle Exceptions?

How to Efficiently Wait for a List of Futures and Handle Exceptions?

Published on 2024-11-02
Browse:146

How to Efficiently Wait for a List of Futures and Handle Exceptions?

Waiting Efficiently on a List of Futures

When dealing with a list of futures, the goal is to wait until completion or the occurrence of an exception in any future. A naive approach involving individual calls to f.get() can lead to unnecessary waiting if an exception occurs early on.

Avoiding Unnecessary Waiting with CompletionService

To address this issue, the CompletionService class comes into play. It allows asynchronous tasks to be executed and their results to be retrieved in a thread-safe manner as they become available. Here's how to use it:

Executor executor = Executors.newFixedThreadPool(4);
CompletionService completionService = new ExecutorCompletionService(executor);

// Submit tasks to the service
for (int i = 0; i () {
        @Override
        public SomeResult call() {
            // Task logic here
            return result;
        }
    });
}

int received = 0;
boolean errors = false;

// Loop until all tasks are complete or an error occurs
while (received  resultFuture = completionService.take(); // Blocks if nothing available
    try {
        SomeResult result = resultFuture.get();
        received  ;
        // Process result here
    } catch (Exception e) {
        // Log error
        errors = true;
    }
}

// Consider canceling remaining tasks if an error occurred

By using the CompletionService approach, you can monitor the completion of tasks in real-time and halt further processing if an error occurs, thus avoiding unnecessary waiting.

Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3