Przesłałem zadanie za pomocą executorów i potrzebuję go zatrzymać po pewnym czasie (np. 5 minut). Próbowałem robić tak:Java Executors: jak mogę zatrzymać przesłane zadania?
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
}
}
Ale zawsze pojawia się błąd: Mam wspólny wektor, który musi być zmodyfikowany przez zadania, a następnie odczytać za pomocą gwintu, a nawet gdybym zatrzymać wszystkie zadania, Jeśli wystąpi przekroczenie limitu czasu, otrzymam:
Exception in thread "Thread-1" java.util.ConcurrentModificationException
Czy coś jest nie tak? Jak mogę zatrzymać przesłane zadania, które nadal działają po 5 minutach?
@Raffaele Di Fazio: Mam sformatowany kod - i dodaje bliskie klamrach, należy sprawdzić pod kątem dokładności. – akf
Dziękuję, przepraszam za nieprawidłowe formatowanie. – Raffo