Ejecutores de Java: ¿cómo puedo detener las tareas enviadas?
He enviado una tarea utilizando ejecutores y necesito que se detenga después de un tiempo (por ejemplo, 5 minutos). He intentado hacer así:
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
}
}
Pero siempre recibo un error: tengo un Vector compartido que necesita ser modificado por las tareas y luego leído por un hilo, e incluso si detengo toda la tarea, si se produce el tiempo de espera, obtengo:
Exception in thread "Thread-1" java.util.ConcurrentModificationException
¿Hay algo mal? ¿Cómo puedo detener las tareas enviadas que siguen funcionando después de 5 minutos?