CompletableFuture实现多个互不相干的方法并行调用

背景

在系统的后台管理页面中,有一些数据的统计需求,往往是前端发一个请求,后端需要调用多个服务来进行数据的查询,然后组装给前端;如果数据量特别大,假设每个数据的查询需要1秒,有几个数据查询就需要多少秒,执行时间随着统计量上升而上升。

经分析,各个数据的查询是独立的,可以考虑改为并行统计,最后再合并,耗时只会是最耗时的那个服务,再加上并行计算额外的小部分耗时。

串行处理

之前的串行处理,就是在一个方法中,挨个调用其他方法,其他方法可能在同一个服务上,也可能在不同的微服务上,耗时等于各个方法调用之和。

  public static Map dataStatistics() {
        Map<String, Object> data = new HashMap<>();
        data.put("userNum", countUserNum());
        data.put("companyNum", countCompanyNum());
        data.put("workNum", countWorkNum());
        data.put("taskNum", countTaskNum());
        data.put("courseNum", countCourseNum());
        data.put("missionNum", countMissonNum());
        data.put("loginNum", countLoginNum());

        return data;
    }

并行处理

使用CompletableFuture的supplyAsync异步调用方法,相当于每个方法单独起一个线程去执行

        CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> countUserNum(), executorService);
        CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> countCompanyNum(), executorService);
        CompletableFuture<Integer> future3 = CompletableFuture.supplyAsync(() -> countWorkNum(), executorService);
        CompletableFuture<Integer> future4 = CompletableFuture.supplyAsync(() -> countTaskNum(), executorService);
        CompletableFuture<Integer> future5 
  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值