Ho 3 oggetti FutureTask<T>
. Voglio che vengano elaborati in modo asincrono. Tuttavia, non appena uno dei metodi get()
di FutureTasks non restituisce null
, desidero continuare i.e il mio metodo (wrapper) restituisce e non attende finché non vengono elaborati gli altri due FutureTasks. ho pensato a qualcosa di simile:Continua quando si prevede un risultato futuro
private File wrapper(final File file) {
ExecutorService executors = Executors.newCachedThreadPool();
File returnFile;
FutureTask<File> normal= ...
FutureTask<File> medium=...
FutureTask<File> huge=...
executors.execute(normal);
executors.execute(medium);
executors.execute(huge);
try {
if((returnFile=normal.get()) != null ||
(returnFile=medium.get()) != null ||
(returnFile=huge.get()) != null)
return returnFile;
} catch(ExecutionException | InterruptedException e) { }
}
Non sono sicuro di come catturare le eccezioni (generata dalla get()) in modo corretto, perché presumo che saranno gettati da quando ho appena ritorno senza aspettare gli altri due compiti da completare. Inoltre ho dubbi sul fatto che il codice funzioni come previsto. Sento che sono vicino alla soluzione ma mi manca qualcosa.
usi java 8? – John
attualmente java 7 – Brenne
cosy ecco che si potrebbe avere risultato immediatamente disponibile per l'attività enorme, ma si è inutilmente bloccato in attesa di attività a lunga esecuzione normale. Se capisco correttamente il tuo requisito, è sufficiente che solo uno di questi termini per l'elaborazione. – John