In Java kann es bei der Arbeit mit Futures vorkommen, dass man warten muss, bis eine Liste zukünftiger Aufgaben abgeschlossen ist bei der Behandlung auftretender Ausnahmen. Ein einfacher Ansatz hierfür wäre, nacheinander auf jede Zukunft zu warten und auf mögliche Ausnahmen zu prüfen. Dieser Ansatz leidet jedoch unter Effizienzproblemen, wenn eine Ausnahme früher in der Liste auftritt, da auf nachfolgende Aufgaben immer noch unnötig gewartet wird.
Um dieses Problem zu beheben, nutzt eine alternative Lösung die CompletionService-Klasse. Der CompletionService empfängt Futures, sobald diese verfügbar sind, und ermöglicht eine vorzeitige Beendigung, wenn eine Ausnahme auftritt.
Ein Beispiel für die Implementierung dieses Ansatzes finden Sie unten:
<code class="java">Executor executor = Executors.newFixedThreadPool(4); CompletionService<SomeResult> completionService = new ExecutorCompletionService<>(executor); // 4 tasks for (int i = 0; i < 4; i++) { completionService.submit(new Callable<SomeResult>() { public SomeResult call() { // ... task implementation return result; } }); } int received = 0; boolean errors = false; while (received < 4 && !errors) { Future<SomeResult> resultFuture = completionService.take(); // Blocks if none available try { SomeResult result = resultFuture.get(); received++; // ... do something with the result } catch (Exception e) { // Log the exception errors = true; } } // Potentially consider canceling any still running tasks if errors occurred</code>
Durch die Nutzung des CompletionService , können Sie effizient auf den Abschluss zukünftiger Aufgaben warten und gleichzeitig Ausnahmen umgehend behandeln.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Liste von Futures effizient verwalten und Ausnahmen in Java behandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!