多线程并发问题解决

有这样一个需求:查询数据库里的多张表的数据量,并按从大到小的顺序排序。

首先想到的就是按传统的做法,去循环查询每一张表的数据量,再放到一个集合进行排序。

这样也能实现,但是查询速度太慢,如果有上百张表,且每张表都是上百万条数据量的,

这样时间需要非常久,这个时候就要用到多线程了,充分调动CPU的资源。

复制代码
 1     //创建线程池
 2     ExecutorService exe = Executors.newCachedThreadPool();
 3     //创建任务数组
 4     CompletableFuture[] list1 = new CompletableFuture[securityDictionaryFroms.size()];
 5     //循环创建任务并把任务加到任务数组
 6     for (int i = 0; i < securityDictionaryFroms.size(); i++) {
 7         SecurityDictionaryFrom securityDictionaryFrom = securityDictionaryFroms.get(i);
 8         //创建任务实现类实例
 9         CountTask countTask = new CountTask(securityDictionaryFrom.getDicValue(), getJdbcTemplate());
10         //定义任务执行完成后需要进行的后续操作
11         CompletableFuture completableFuture = CompletableFuture.supplyAsync(countTask, exe).whenComplete((result, e) -> {
12             Temp temp = new Temp();
13             temp.setTableNameCn(securityDictionaryFrom.getDicName());
14             temp.setTableNameEn(securityDictionaryFrom.getDicValue());
15             temp.setDataSum(result);
16             list.add(temp);
17         }).exceptionally((e) -> {
18             e.printStackTrace();
19             return 0;
20         });
21         //将任务加入任务数组
22         list1[i] = completableFuture;
23     }
24     //将任务数组交给一个任务来调度
25     CompletableFuture<Void> all = CompletableFuture.allOf(list1).thenApply(x -> {
26         log.info("all");
27         return null;
28     });
29     //阻塞直至所有任务都执行完成
30     Void aVoid = all.get();
31     //关闭线程池
32     exe.shutdown();
33     list2 = list;
34     //对查询结果进行排序
35     list2 = list2.stream().sorted(Comparator.comparing(Temp::getDataSum).reversed()).collect(Collectors.toList());
复制代码

 

posted on   德邦总管  阅读(181)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示