Angenommen, ich habe eine Warteschlange voller Aufgaben, die ich an einen Executor-Service senden muss. Ich möchte, dass sie einzeln verarbeitet werden. Der einfachste Weg, den ich mir vorstellen kann, ist:
- Nehmen Sie eine Aufgabe aus der Warteschlange
- Senden Sie es an den Testamentsvollstrecker
- Rufen Sie .get für die zurückgegebene Zukunft auf und blockieren Sie, bis ein Ergebnis verfügbar ist
- Nehmen Sie eine andere Aufgabe aus der Warteschlange ...
Ich versuche jedoch zu vermeiden, vollständig zu blockieren. Wenn ich 10.000 solcher Warteschlangen habe, deren Aufgaben einzeln verarbeitet werden müssen, geht mir der Stapelspeicher aus, da die meisten von ihnen an blockierten Threads festhalten.
Ich möchte eine Aufgabe einreichen und einen Rückruf bereitstellen, der aufgerufen wird, wenn die Aufgabe abgeschlossen ist. Ich werde diese Rückrufbenachrichtigung als Flag verwenden, um die nächste Aufgabe zu senden. (FunctionalJava und Jetlang verwenden anscheinend solche nicht blockierenden Algorithmen, aber ich kann ihren Code nicht verstehen.)
Wie kann ich das mit java.util.concurrent von JDK tun, ohne meinen eigenen Executor-Service zu schreiben?
(Die Warteschlange, die mich mit diesen Aufgaben versorgt, blockiert möglicherweise selbst, aber das ist ein Problem, das später behoben werden muss.)