Можно ли немедленно прервать выполнение всех остальных потоков, если в любом из потоков асинхронного метода обнаружено исключение? Метод возвращает объект CompletetableFuture.
@Async("asyncTaskExecutor")
public CompletableFuture<String> updateOp(String department, List<Student> student, Boolean flag)
{
....
....
return departmentId;
}
Этот асинхронный c метод вызывается другим методом класса обслуживания:
public List<String> updateDepartments
{
....
....
try {
List<CompletableFuture<String>> futures = new ArrayList<>();
for (String department: departmentList) {
CompletableFuture<String> departmentId= updateAsyncService.updateOp(department,
studentList, statusFlag);
futures.add(departmentId);
}
CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).join();
for (CompletableFuture<String> future : futures) {
departmentIdList.add(future.get());
}
} catch (Exception e) {
logger.error(e);
}
return departmentIdList;
}
Вышеупомянутый метод выполняется для различных отделов асинхронно. Теперь, если операция обновления не выполняется для какого-либо отдела (исключение возникает в любом потоке при выполнении updateOp), я хочу, чтобы все потоки прекратили свое выполнение. updateOp запущен успешно, чтобы получить список этих идентификаторов отделов. Заранее благодарим за любую помощь.