Avere il seguente codice a portata di mano:ExecutorService con invokeAll() e futuro in java
ExecutorService executor = Executors.newFixedThreadPool(10);
Collection collection = new ArrayList();
for (int n=1; n<100; n++)
collection.add(new MyThread(n));
try {
List<Future<Boolean>> futures = executor.invokeAll(collection);
for(Future<Boolean> future : futures){
future.get();
if (future.isDone()) {
System.out.println("true");
}
else
System.out.println("false");
}
} catch (Exception e) {
e.printStackTrace();
}
Se quanto sopra è corretto?
E se tutti gli future.isDone()
sono veri, allora tutti i thread sono stati eseguiti?
Come posso fare una bandiera, per essere sicuro che siano tutti fatti?
modo che io possa eliminare questa parte? if (future.isDone()) { System.out.println ("true"); } else { System.out.println ("false"); } – fen1ksss
Penso di sì. Il [javadoc] (http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/Future.html#get()) per 'Future' afferma che' get' "Aspetta se necessario per il calcolo da completare e quindi recupera il risultato. ". Quindi in realtà è necessario anche racchiudere 'isDone' nel proprio gestore di eccezioni. – vainolo