如果任何一个线程在异步方法中遇到异常,是否可以立即中断所有其他线程的执行?该方法返回一个completableFuture对象。
@Async("asyncTaskExecutor")
public CompletableFuture<String> updateOp(String department, List<Student> student, Boolean flag)
{
....
....
return departmentId;
}
这个异步方法被另一个服务类方法调用。
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运行成功,基本上可以得到这些部门的Ids列表。先谢谢大家的帮助。
不知道join()是否真的能达到你的目的。试着像下面的代码片段一样处理它。祝您好运
boolean flag = false;
for (Future<Void> future : futureSet ) {
try {
future.get();
} catch (InterruptedException e) {
System.out.println("Interrupted");
} catch (ExecutionException e) {
System.out.println("Exception thrown from the thread");
flag = true;
break;
}
}
if(flag) {
for (Future<Void> future : futureSet) {
future.cancel(true);
}
}