Ich habe eine Aufgabe, die ich mit einer festen Rate ausführen möchte. Ich brauche aber auch das Ergebnis der Aufgabe nach jeder Ausführung. Hier ist, was ich versucht habe:
Die Aufgabe
%Vor% Nein, ich habe versucht, ScheduledExecutorService
für die Planung zu verwenden. Es stellt sich heraus, dass Sie eine Callable
nicht mit einer festen Rate einplanen können, nur eine Runnable
kann dies tun.
Bitte beraten.
Verwenden Sie ein Erzeuger / Verbraucher-Muster : Lassen Sie das Runnable put sein Ergebnis auf einem BlockingQueue . Habe noch einen Thread take () aus der Warteschlange.
Take ist ein blockierender Anruf (dh er gibt nur zurück, wenn sich etwas in der Warteschlange befindet), sodass Sie Ihre Ergebnisse erhalten, sobald sie verfügbar sind.
Sie können dies mit dem hollywood-Muster kombinieren, um den wartenden Thread mit einem Callback zu versehen, damit Ihr Code aufgerufen wird, wenn etwas passiert ist verfügbar.
Wenn Sie sich nicht um den Rückgabewert von Callable
kümmern, können Sie ihn in ein Runnable
umbrechen und damit an ScheduledExecutorService
übergeben.
Wenn Sie an ScheduledExecutroService
senden möchten, können Sie Ihre Callable
:
Tags und Links java java.util.concurrent