实现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();
相关推荐
小猪咪piggy15 分钟前
【项目】小型支付商城 MVC/DDD
java·jvm·数据库
知兀19 分钟前
【Spring/SpringBoot】SSM(Spring+Spring MVC+Mybatis)方案、各部分职责、与Springboot关系
java·spring boot·spring
向葭奔赴♡20 分钟前
Spring IOC/DI 与 MVC 从入门到实战
java·开发语言
早退的程序员21 分钟前
记一次 Maven 3.8.3 无法下载 HTTP 仓库依赖的排查历程
java·http·maven
向阳而生,一路生花24 分钟前
redis离线安装
java·数据库·redis
Tigshop开源商城系统24 分钟前
Tigshop 开源商城系统 php v5.1.9.1版本正式发布
java·大数据·开源·php·开源软件
2401_8414956441 分钟前
【数据结构】基于BF算法的树种病毒检测
java·数据结构·c++·python·算法·字符串·模式匹配
little_xianzhong42 分钟前
三个常听到的消息/中间件MQTT RabbitMQ Kafka
java·笔记·中间件·消息队列
论迹1 小时前
【Spring Cloud 微服务】-- 服务拆分原则
java·spring cloud·微服务
汤姆yu1 小时前
基于springboot的民间救援队救助系统
java·spring boot·后端·救援队