Maison  >  Article  >  Java  >  Comment attendre efficacement une liste de contrats à terme et gérer les exceptions ?

Comment attendre efficacement une liste de contrats à terme et gérer les exceptions ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 00:48:28889parcourir

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

Attendre efficacement une liste de futurs

Lorsqu'on traite une liste de futurs, l'objectif est d'attendre l'achèvement ou l'apparition de une exception dans tout avenir. Une approche naïve impliquant des appels individuels à f.get() peut conduire à une attente inutile si une exception se produit dès le début.

Éviter les attentes inutiles avec CompletionService

Pour résoudre ce problème problème, la classe CompletionService entre en jeu. Il permet d'exécuter des tâches asynchrones et de récupérer leurs résultats de manière thread-safe dès qu'ils deviennent disponibles. Voici comment l'utiliser :

<code class="java">Executor executor = Executors.newFixedThreadPool(4);
CompletionService<SomeResult> completionService = new ExecutorCompletionService<>(executor);

// Submit tasks to the service
for (int i = 0; i < 4; i++) {
    completionService.submit(new Callable<SomeResult>() {
        @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 < 4 && !errors) {
    Future<SomeResult> 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</code>

En utilisant l'approche CompletionService, vous pouvez surveiller l'achèvement des tâches en temps réel et interrompre le traitement ultérieur si une erreur se produit, évitant ainsi une attente inutile.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn