实现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();
相关推荐
风象南2 分钟前
SpringBoot中6种跨域请求解决方案
java·spring boot·后端
vivo互联网技术4 分钟前
活动中台系统慢 SQL 治理实践
java·数据库·后端
是小李呀~14 分钟前
【工作梳理】怎么把f12里面的东西导入到postman
java
攀小黑14 分钟前
Java 多线程加锁 synchronized 关键字 字符串当做key
java·开发语言
余华余华28 分钟前
2024年蓝桥杯Java B组省赛真题超详解析-分布式队列
java·职场和发展·蓝桥杯
破罐子不摔30 分钟前
【C#使用S7.NET库读取和写入西门子PLC变量】
java·c#·.net
可爱的霸王龙42 分钟前
JVM——模型分析、回收机制
java·jvm
神秘的t43 分钟前
javaSE————网络原理
java·网络
hongweihao1 小时前
啥?有分布式锁都还能被突破
java·后端
BeerBear1 小时前
记一次Kill <Pid> Java进程无法退出的问题处理
java·后端·spring