Sto scrivendo un'applicazione in Java che utilizza ExecutorService per l'esecuzione di più thread.Monitoraggio delle attività completate in ExecutorService
Desidero inviare più attività (migliaia alla volta) all'Esecutore come Callables e al termine, recuperare il risultato. Il modo in cui mi sto avvicinando è ogni volta che chiamo funzione submit(), ottengo un Futuro che memorizzo in un ArrayList. Successivamente passo l'Elenco a un thread che continua a scorrere su di esso, chiamando la funzione future.get() con un timeout per vedere se l'attività è stata completata. è questo il giusto approccio o troppo troppo inefficiente?
EDIT --- Ulteriori informazioni --- Un altro problema è che ogni Callable impiega una quantità diversa di tempo di elaborazione. Quindi, se prendo semplicemente il primo elemento dall'elenco e chiamo get() su di esso, esso verrà bloccato mentre i risultati di altri potrebbero diventare disponibili e il programma non lo saprà. Questo è il motivo per cui devo continuare a ripetere i timeout.
grazie in anticipo
vi consiglio di prendere in considerazione le utilità ListenableFuture nella biblioteca Guava: https://code.google.com/p/guava-libraries/wiki/ListenableFutureExplained – Enwired