Ho un Callable<String>
. Voglio eseguirlo periodicamente tramite ScheduledExecutorService.scheduleAtFixedRate()
e per ottenere un elenco di tutte le stringhe restituite dalle chiamate .call()
sul mio callable. Come scheduleAtFixedRate
non ci vuole un Callable
(solo Runnable
s) ho bisogno di stendere un costume Runnable
che avvolge la mia Callable
, qualcosa in questo senso:Esegui periodicamente un Callable tramite 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);
Naturalmente, mi piacerebbe evitare di stendere il mio personalizzato cosa (specialmente nel codice multi-thread), quindi mi chiedo che ci sia una classe JDK che fa questo tipo di aggregazione?
no, non v'è un programma di utilità esistente nel JDK di mettere i risultati Callable in una collezione per voi. – jtahlborn
Questo è quello che pensavo. Grazie. –