Leichte Art, auf eine Gruppe asynchroner Java-Aufrufe zu warten

8

Wir schreiben einen Code in einer einzigen Blockierungsmethode, der asynchron mehrere, langsame Dienste von Drittanbietern aufruft. Diese asynchronen Aufrufe sind in Code eingebettet, der dieselbe Schnittstellenmethode implementiert. Wir möchten die asynchronen Aufrufe auslösen und warten, bis alle zurückgegeben wurden, bevor wir den Aufruf der Blockierungsmethode zurückgeben.

Ich hoffe, das ist klar!

Gibt es ein geeignetes Designmuster / eine geeignete Bibliothek für die Implementierung? Es muss ein ziemlich übliches Muster sein. Vielen Dank im Voraus.

    
rich 08.02.2011, 19:49
quelle

2 Antworten

9

Sie könnten ein CountDownLatch verwenden initialisiert mit der Anzahl der Async-Aufrufe und jeder Async-Handler dekrementiert den Latch. Das "äußere" Blockierverfahren würde einfach auf den vollständigen Countdown "warten", z. B .:

%Vor%     
maerics 08.02.2011, 20:10
quelle
2

Ich bin mir nicht sicher, wie Sie die Dinge machen, aber ich würde alles haben, was die asynchronen Aufgaben startet (am besten mit Executor ) und für jede Aufgabe, die Sie starten, eine Future<?> zurückgeben. Dann müssten Sie einfach alle Future<?> s in ein Collection setzen und durchlaufen, indem Sie get() aufrufen:

%Vor%

Ich habe die Ausnahmebehandlung für get() hier weggelassen, aber das ist die allgemeine Idee.

    
ColinD 08.02.2011 20:16
quelle

Tags und Links