Mam numer Callable<String>
. Chcę go uruchamiać okresowo przez ScheduledExecutorService.scheduleAtFixedRate()
i otrzymywać listę wszystkich ciągów, które zostały zwrócone przez wywołania .call()
na moim żądaniu. Jak scheduleAtFixedRate
nie bierze Callable
(tylko Runnable
s) muszę rozwałkować zwyczaj Runnable
która otacza moje Callable
, coś wzdłuż tych linii:Okresowe uruchamianie usługi Callable za pośrednictwem usługi 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);
Naturalnie chciałbym uniknąć toczenia moje własne niestandardowe (w szczególności w kodzie wielowątkowym), więc zastanawiam się, czy istnieje klasa JDK, która dokonuje tego rodzaju agregacji?
nie, nie jest istniejącym narzędzie w JDK umieścić wywoływalnym wyniki do kolekcji dla Ciebie. – jtahlborn
Tak myślałem. Dzięki. –