我有AsyncService类,其中包含两个异步方法。
@Service
public class AsyncService {
@Async
public HashMap<int, Student> studentMap(List<String> students) {
//contains database call
return result1;
}
@Async
public HashMap<int, Teacher> teacherMap(List<String> teachers) {
//contains database call
return result2;
}
}
这两个方法是从UserService类中调用的。
@Service
public class UserService {
public List<User> doJob () {
HashMap<int, Student> = asyncService.studentMap(students);
HashMap<int, Teacher> = asyncService.teacherMap(teachers);
// now work with these HashMap
}
}
我想确保当我使用这两个异步调用返回的结果时,完成了两个异步方法。我怎样才能做到这一点?我知道未来可以成为解决方案。但是我不确定如何在这里使用它。还有其他解决方案吗?我正在使用弹簧靴。
答案 0 :(得分:0)
您可以使用CompletableFuture
进行操作。这是一个示例:
CompletableFuture.allOf(
CompletableFuture.runAsync(() ->
asyncService.studentMap(students);//make it synchronized call
),
CompletableFuture.runAsync(() ->
asyncService.teacherMap(teachers);// make it synchronized call
).thenRun(() -> {
//do after complete 2 async call.
}).get();
您的服务呼叫需要同步:
@Service
public class AsyncService {
public Hashmap<int, Student> studentMap(List<String> students) {
//contains database call
return result1;
}
public Hashmap<int, Teacher> teacherMap(List<String> teachers) {
//contains database call
}
}
答案 1 :(得分:0)
@Async
注释假定带注释的方法返回Future
。拥有Future
后,您只能使用其他方法来使用结果,除了调用Future.get()
之外,start
会在异步过程完成后严格执行。
也就是说,正确实现异步服务,您不会遇到任何麻烦。