Ho inviato un'attività utilizzando gli executors e ho bisogno che si fermi dopo un po 'di tempo (ad esempio 5 minuti). Ho provato a fare in questo modo:Esecutori Java: come posso interrompere le attività inoltrate?
for (Future<?> fut : e.invokeAll(tasks, 300, TimeUnit.SECONDS)) {
try {
fut.get();
} catch (CancellationException ex) {
fut.cancel(true);
tasks.clear();
} catch(ExecutionException ex){
ex.printStackTrace(); //FIXME: gestita con printstack
}
}
ma ottengo sempre un errore: ho un vettore condivisa che deve essere modificato dai compiti e poi leggere a un filo, e anche se mi fermo tutta l'operazione, se si verifica il timeout, ottengo:
Exception in thread "Thread-1" java.util.ConcurrentModificationException
C'è qualcosa che non va? Come posso interrompere le attività inviate che funzionano ancora dopo 5 minuti?
@Raffaele Di Fazio: Ho formattato il codice - e ha aggiunto una stretta doppietta, si prega di verificarne la correttezza. – akf
Grazie, mi dispiace per la formattazione sbagliata. – Raffo