Ich habe eine Callable<String>
. Ich möchte es regelmäßig über ScheduledExecutorService.scheduleAtFixedRate()
ausführen und eine Liste aller Zeichenfolgen erhalten, die von den .call()
-Aufrufe auf meiner aufrufbar zurückgegeben wurden. Wie scheduleAtFixedRate
nicht nehmen Sie sich ein Callable
(nur Runnable
s) ich eine benutzerdefinierte ausrollen müssen Runnable
, dass meine Callable
Wraps, etwas in dieser Richtung:In regelmäßigen Abständen ein Callable über ScheduledExecutorService
final Callable<String> myCallable = ....;
final ConcurrentLinkedQueue<String> results
= new ConcurrentLinkedQueue<String>();
Runnable r = new Runnable() {
@Override public void run() {
try {
results.add(myCallable.call());
} catch (Exception e) {
results.add(null); // Assuming I want to know that an invocation failed
}
}
};
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(r, 0, 1, TimeUnit.SECONDS);
Natürlich würde ich meine eigene benutzerdefinierte vermeiden möchten Ausrollen (vor allem im Multi-Threaded-Code), also frage ich mich, ob es eine JDK-Klasse gibt, die diese Art von Aggregation durchführt?
nein, da kein vorhandenes Dienstprogramm in der jdk ist für Sie Callable Ergebnisse in einer Sammlung zu setzen. – jtahlborn
Das habe ich mir gedacht. Vielen Dank. –