实现CompletableFuture的返回数据,放入每个list中
2023-12-13 05:43:48
为啥使用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();
文章来源:https://blog.csdn.net/qq_40011778/article/details/134948688
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!