Qual è il modo più semplice di attendere il completamento di tutte le attività ExecutorService
? La mia attività è principalmente computazionale, quindi voglio solo eseguire un gran numero di lavori, uno su ciascun core. In questo momento la mia configurazione è simile al seguente:
ExecutorService es = Executors.newFixedThreadPool(2);
for (DataTable singleTable : uniquePhrases) {
es.execute(new ComputeDTask(singleTable));
}
try{
es.wait();
}
catch (InterruptedException e){
e.printStackTrace();
}
ComputeDTask
implementa eseguibile. Questo sembra eseguire correttamente le attività, ma il codice si blocca wait()
con IllegalMonitorStateException
. Questo è strano, perché ho giocato con alcuni esempi di giocattoli e sembrava funzionare.
uniquePhrases
contiene diverse decine di migliaia di elementi. Dovrei usare un altro metodo? Sto cercando qualcosa il più semplice possibile
Executors.newFixedThreadPool(System.getRuntime().availableProcessors());
es
) quando vuoi aspettare - il blocco verrà automaticamente rilasciato durante l'attesa