为了账号安全,请及时绑定邮箱和手机立即绑定

如何确保在使用返回结果之前执行异步方法?

如何确保在使用返回结果之前执行异步方法?

小唯快跑啊 2021-06-13 12:04:35
我有包含两个异步方法的 AsyncService 类。@Servicepublic 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 类调用的。@Servicepublic class UserService {    public List<User> doJob () {        HashMap<int, Student> = asyncService.studentMap(students);        HashMap<int, Teacher> = asyncService.teacherMap(teachers);        // now work with these HashMap    }}我想确保当我使用这两个异步调用的返回结果时,两个异步方法都完成了。我怎样才能做到这一点?我知道完整的未来可以在这里解决。但我不确定如何在这里使用它。还有其他解决方案吗?我正在使用弹簧靴。
查看完整描述

2 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

@Async注释假设被注释的方法返回Future. 有一个Future你刚才有没有其他的方式来使用的结果,除了调用Future.get()它returs异步过程完成后严格。也就是说,正确实现异步服务,你就没有麻烦了。


查看完整回答
反对 回复 2021-06-17
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

你可以用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

}

}


查看完整回答
反对 回复 2021-06-17
  • 2 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信