Es wird regelmäßig ein Callable über ScheduledExecutorService ausgeführt

8

Ich habe ein Callable<String> . Ich möchte es regelmäßig über ScheduledExecutorService.scheduleAtFixedRate() ausführen, und um eine Liste aller Strings zu erhalten, die von den .call() -Aufrufen auf meinem Callable zurückgegeben wurden. Da scheduleAtFixedRate kein Callable (nur Runnable s) benötigt, muss ich ein benutzerdefiniertes Runnable , das mein Callable umschließt, etwas in diese Richtung rollen:

%Vor%

Natürlich möchte ich vermeiden, meine eigenen benutzerdefinierten Dinger (insbesondere in Multi-Threaded-Code) auszurollen, also frage ich mich, gibt es eine JDK-Klasse, die diese Art der Aggregation macht?

    
Itay Maman 26.11.2012, 01:45
quelle

1 Antwort

0

Was Sie oben tun, behandelt Ihre Callable-Implementierung als nur eine weitere normale Klasse. Sie übermitteln die Callable nicht an einen ThreadPool-Executor. Der Aufruf von Callable.call () verwendet den ThreadPoolExecutor nicht.

Sie müssen Ihre Aufgabe (Runnable / Callable / ForkJoinTask, etc ..) an einen ThreadPool senden, um das Thread-Pooling zu nutzen. Sie können die Futures verwenden, um die einmal ausgeführten Ergebnisse zu sammeln.

ForkJoinPool ist eine Option, die Sie in JDK 7 ausprobieren können. Fork die Aufgaben und Join sie mit ForkJoinTask Warum nicht Futures verwenden? Sie sind genau dafür gedacht, den Status der Aufgabe und ihr Ergebnis zu kennen.

Haben Sie sich das angesehen: Verwenden von Callable, um Ergebnisse von Runnables zurückzugeben

    
Rajendra 08.03.2013 20:06
quelle

Tags und Links