Я отправил задачу с помощью исполнителей, и мне нужно, чтобы она остановилась через некоторое время (например, через 5 минут). Я пробовал делать вот так:
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
}
}
Но я всегда получаю сообщение об ошибке: у меня есть общий вектор, который нужно изменить задачами, а затем прочитать потоком, и даже если я остановлю все задачи, если произойдет тайм-аут, я получаю:
Exception in thread "Thread-1" java.util.ConcurrentModificationException
Здесь что-то не так? Как я могу остановить отправленные задачи, которые все еще работают через 5 минут?