实现CompletableFuture的返回数据,放入每个list中

为啥使用CompletableFuture

有时候我们后端接口,可能会有多个查询,而且这些查询是互不关联的,使用串行的方式,在数据量不大的时候,时间没什么影响,但是在数据量大的时候,使用CompletableFuture也是一种提高效率的方法

复制代码
 //获取存款
        CompletableFuture<List<Map<String, Object>>> balanceFuture = CompletableFuture.supplyAsync(() -> {
            List<Map<String, Object>> mapList = businessMapper.getDepositsByName(param1);
            return mapList;
        });
        //获取贷款
        CompletableFuture<List<Map<String, Object>>> tableInFuture = CompletableFuture.supplyAsync(() -> {
            List<Map<String, Object>> mapListB = businessMapper.getDepositsByName(param2);
            return mapListB;
        });
        //等balanceFuture tableInFuture 两个任务都执行完
        CompletableFuture.allOf(balanceFuture,tableInFuture);
            List<Map<String, Object>> mapList = balanceFuture.join();
        List<Map<String, Object>> mapListB = tableInFuture.join();

如上,使用CompletableFuture查询存款和贷款的,使用了异步,所以两个sql的时间不会累加。

下面还有一种是使用在for循环中,当然一般是不能把查询放入for循环中的,但是如果实在需要,也是可以用CompletableFuture的

复制代码
 List<Map<String,Object>> list = userMapper.groupMonthCount(year);
        List<CompletableFuture<List<Map<String, Object>>>> futures = new ArrayList<>();

        for (Map<String, Object> map : list) {
            Object month = map.get("MONTH");
            futures.add(CompletableFuture.supplyAsync(() -> {
                List<Map<String, Object>> dayList = userMapper.groupDayCount(year + month);
                return dayList;
            }).thenApply(dayList -> {
                map.put("echartData", dayList);
                return dayList;
            }));
        }
        //等待全部完成
        CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
相关推荐
JH30738 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
Coder_Boy_9 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
invicinble9 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟9 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖9 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
qq_124987075311 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_11 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.11 小时前
Day06——权限认证-项目集成
java
瑶山11 小时前
Spring Cloud微服务搭建四、集成RocketMQ消息队列
java·spring cloud·微服务·rocketmq·dashboard
abluckyboy11 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法