Java Executors: как я могу остановить отправленные задачи?
Я отправил задание с использованием исполнителей, и мне нужно, чтобы оно прекратилось через некоторое время (например, через 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 минут?