Attendre efficacement une liste de contrats à terme
Lorsque l'on traite une liste de contrats à terme, 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 l'attente inutile 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 :
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
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.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3