springBoot中service层查询使用多线程CompletableFuture(有返回值)

重点:

1. 创建线程池

 Executor executor = Executors.newCachedThreadPool();//保存线程List<CompletableFuture<Void>> futures = new ArrayList<>();

2.使用

//这里可以是多个看下面代码是在for中使用的
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {},executor );

3.等待所有线程执行完毕

  futures.add(future);

4.等待所有线程执行完毕

 CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();

byTimelist方法:

在这个byTimelist方法示例中,我们使用CompletableFuture.supplyAsync()将每个vehicleStatisticsMapper.chuchelist(chuchelistVo)方法调用包装起来,并返回一个CompletableFuture,其中结果的类型为Long。
然后,我们在相应的位置获取异步任务的结果,使用get()方法阻塞当前线程,直到结果可用。
package com.ruoyi.system.service.vehiclestatistics;import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.domain.vo.ChuchelistVo;
import com.ruoyi.system.domain.vo.VehicleStatisticsVo;
import com.ruoyi.system.mapper.vehiclestatistics.VehicleStatisticsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;@Service
public class VehicleStatisticsServiceimpl implements VehicleStatisticsService {@AutowiredVehicleStatisticsMapper vehicleStatisticsMapper;@Overridepublic List<VehicleStatisticsVo> byTimelist(String startTime, String endTime) {List<VehicleStatisticsVo> vehicleStatisticsVos = vehicleStatisticsMapper.byTimelist(startTime, endTime);List<CompletableFuture<Void>> futures = new ArrayList<>();/*** 使用线程池的工厂方法创建线程池(会自动设置线程的数量大小)*/Executor executor = Executors.newCachedThreadPool();for (VehicleStatisticsVo vehicleStatisticsVo : vehicleStatisticsVos) {CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {ChuchelistVo chuchelistVo = new ChuchelistVo();chuchelistVo.setStartTime(startTime);chuchelistVo.setEndTime(endTime);chuchelistVo.setDeptid(Long.valueOf(vehicleStatisticsVo.getBmId()));chuchelistVo.setChsingletype("值班");CompletableFuture<Long> zhibanFuture = CompletableFuture.supplyAsync(() ->(long) vehicleStatisticsMapper.chuchelist(chuchelistVo).size(),executor);chuchelistVo.setChsingletype("紧急");CompletableFuture<Long> jjChucheFuture = CompletableFuture.supplyAsync(() ->(long) vehicleStatisticsMapper.chuchelist(chuchelistVo).size(),executor);chuchelistVo.setChsingletype("正常");CompletableFuture<Long> chuCheFuture = CompletableFuture.supplyAsync(() ->(long) vehicleStatisticsMapper.chuchelist(chuchelistVo).size(),executor);ChuchelistVo chuchelistVo2 = new ChuchelistVo();chuchelistVo2.setStartTime(startTime);chuchelistVo2.setEndTime(endTime);chuchelistVo2.setLongAndShortparame("and cc.sempid=0");chuchelistVo2.setDeptid(Long.valueOf(vehicleStatisticsVo.getBmId()));CompletableFuture<Long> dtChucheFuture = CompletableFuture.supplyAsync(() ->(long) vehicleStatisticsMapper.chuchelist2(chuchelistVo2).size(),executor);chuchelistVo2.setLongAndShortparame("and cc.sempid!=0");CompletableFuture<Long> ctChucheFuture = CompletableFuture.supplyAsync(() ->(long) vehicleStatisticsMapper.chuchelist2(chuchelistVo2).size(),executor);try {vehicleStatisticsVo.setZhiban(zhibanFuture.get());vehicleStatisticsVo.setJjChuche(jjChucheFuture.get());vehicleStatisticsVo.setChuChe(chuCheFuture.get());vehicleStatisticsVo.setDtChuche(dtChucheFuture.get());vehicleStatisticsVo.setCtChuche(ctChucheFuture.get());} catch (InterruptedException | ExecutionException e) {e.printStackTrace();}},executor);futures.add(future);}CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();return vehicleStatisticsVos;}@Overridepublic AjaxResult bytypelist(ChuchelistVo chuchelistVo1) {Map<String, Object> ms = new HashMap<>();Map<String, Object> rs = new HashMap<>();Map<String, Object> rs2 = new HashMap<>();ChuchelistVo chuchelistVo = new ChuchelistVo();chuchelistVo.setStartTime(chuchelistVo1.getStartTime());chuchelistVo.setEndTime(chuchelistVo1.getEndTime());chuchelistVo.setChsingletype(chuchelistVo1.getChsingletype());for (Long deptid : chuchelistVo1.getDeptids()) {chuchelistVo.setDeptid(deptid);rs2.put("部门id", deptid);rs2.put("部门名称", vehicleStatisticsMapper.chuchelist(chuchelistVo).size() > 0 ? vehicleStatisticsMapper.chuchelist(chuchelistVo).get(0).getDeptname() : ("" + deptid));rs2.put("listsize", (long) vehicleStatisticsMapper.chuchelist(chuchelistVo).size());rs2.put("list",vehicleStatisticsMapper.chuchelist(chuchelistVo));rs.put(vehicleStatisticsMapper.chuchelist(chuchelistVo).size() > 0 ? vehicleStatisticsMapper.chuchelist(chuchelistVo).get(0).getDeptname() : ("" + deptid),rs2);}ms.put("result", rs);ms.put("startTime", chuchelistVo.getStartTime());ms.put("endTime", chuchelistVo.getEndTime());return AjaxResult.success(ms);}@Overridepublic AjaxResult bylongandshortparamelist(ChuchelistVo chuchelistVo1) {Map<String, Object> ms = new HashMap<>();Map<String, Object> rs = new HashMap<>();Map<String, Object> rs2 = new HashMap<>();ChuchelistVo chuchelistVo = new ChuchelistVo();chuchelistVo.setStartTime(chuchelistVo1.getStartTime());chuchelistVo.setEndTime(chuchelistVo1.getEndTime());if (chuchelistVo1.getLongAndShortparame() != null) {if ("长途".equals(chuchelistVo1.getLongAndShortparame())) {chuchelistVo.setLongAndShortparame("and cc.sempid=0");}if ("短途".equals(chuchelistVo1.getLongAndShortparame())) {chuchelistVo.setLongAndShortparame("and cc.sempid!=0");}}for (Long deptid : chuchelistVo1.getDeptids()) {chuchelistVo.setDeptid(deptid);List<ChuchelistVo> chuchelistVos = vehicleStatisticsMapper.chuchelist2(chuchelistVo);rs2.put(chuchelistVos.size() > 0 ? chuchelistVos.get(0).getDeptname() : ("" + deptid), (long) chuchelistVos.size());rs2.put("部门id", deptid);rs2.put("部门名称", chuchelistVos.size() > 0 ? chuchelistVos.get(0).getDeptname() : ("" + deptid));rs2.put("listsize", chuchelistVos.size());rs2.put("list", chuchelistVos);rs.put(chuchelistVos.size() > 0 ? chuchelistVos.get(0).getDeptname() : ("" + deptid), rs2);}ms.put("result", rs);ms.put("startTime", chuchelistVo.getStartTime());ms.put("endTime", chuchelistVo.getEndTime());return AjaxResult.success(ms);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/37764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析路由与网络:网络的脉络

目录 路由 广域网 公网 外网 局域网 内网 以太网 Wi-Fi CDN IPv4和IPv6 IP地址分类 无类别域间路由&#xff08;CIDR&#xff09; 路由 路由是指在计算机网络中&#xff0c;将数据包从源地址传递到目标地址的过程。在一个复杂的网络中&#xff0c;数据包需要经过多…

冶金作业VR虚拟仿真厂家

对于高风险行业来说&#xff0c;开展安全教育培训是企业的重点工作&#xff0c;传统培训逐渐跟不上时代变化和工人需求&#xff0c;冶金安全VR模拟仿真培训系统作为一种新型的教育和培训工具&#xff0c;借助VR虚拟现实技术为冶金行业的工人提供一个安全、高效的培训环境。 冶金…

Angular中的管道Pipes

Angular中的管道&#xff08;Pipes&#xff09;是一种强大的工具&#xff0c;它可以处理和转换数据&#xff0c;然后将其呈现在视图中。它们可以被用于排序、格式化和过滤数据等任务。在本文中&#xff0c;我们将介绍Angular中的管道以及如何使用它们来简化开发过程。 管道的基…

Ansible Service模块,使用 Ansible Service模块进行服务管理

Ansible 是一种自动化工具&#xff0c;它可以简化配置管理、应用程序部署和任务自动化等操作。Ansible 的 Service 模块是其中一个重要的模块&#xff0c;它提供了管理服务的功能&#xff0c;使得在远程主机上启动、停止、重启和重新加载服务变得简单和可靠。本文将介绍 Ansibl…

大疆秋招指南,网申测评和面试攻略

大疆秋招内容简介 这是一个非常卷的时代&#xff0c;一到毕业季&#xff0c;各种各样规模不一的公司&#xff0c;纷纷向社会招聘&#xff0c;竞争实力强&#xff0c;知名度越高的企业&#xff0c;往往越能得到能力出众的人才的青睐&#xff0c;也正是在一批批新血液的注入下&a…

户外组网摆脱布线困扰,工业5G网关实现无人值守、远程实时监控

在物联网通信技术发达的2023&#xff0c;网络覆盖对所及之处的全面覆盖&#xff0c;科技发展的促使下很多高危户外场景也在思考如何利用无线技术提高人员安全及现场无人化管理。 煤矿是我们国家不可缺少的重要能源&#xff0c;其开采过程的危险系数也是众所皆知的&#xff0c;…

为什么爬虫要用高匿代理IP?高匿代理IP有什么优点

只要搜代理IP&#xff0c;度娘就能给我们跳出很多品牌的推广&#xff0c;比如我们青果网路的。 正如你所看到的&#xff0c;我们厂商很多宣传用词都会用到高匿这2字。 这是为什么呢&#xff1f;高匿IP有那么重要吗&#xff1f; 这就需要我们从HTTP代理应用最多最广的&#xf…

云上社群学习系统部分接口设计详解

目录 一、项目简介 二、技术选型 三、数据库设计 四、接口设计及思考 回复帖子部分 4.1 回复帖子 4.1.1.1 实现逻辑 4.1.1.2创建Service接⼝ 4.1.1.3 实现Service接⼝ 4.1.1.4 实现Controller 4.1.1.5 测试接口 4.1.1.6 实现前端页面 4.2 点赞帖子 4.2.1.1 参数要求…

探索前端动画之CSS魔法

引言 在现代网页设计中&#xff0c;动画已经成为了吸引用户注意力、提升用户体验的重要手段之一。而在前端开发中&#xff0c;CSS动画是一种常见且强大的实现方式。本篇博客将带你深入探索前端动画中的CSS魔法&#xff0c;通过清晰的思路和完整的示例代码&#xff0c;帮助你掌…

tools/packtool/dragon: 没有那个文件或目录 明明有这个文件

tools/packtool/dragon: 没有那个文件或目录 明明有这个文件 在编译一个工程时碰到这个问题&#xff0c;重装虚拟机&#xff0c;更换ubuntu系统版本都没有解决&#xff0c;看到网上的文章解决了。 ubuntu中执行可执行文件时报错“没有那个文件或目录”的解决办法&#xff08;…

Storm学习之使用官方Docker镜像快速搭建Storm运行环境

文章目录 0.前言搭建完的效果 1.教程1.1.docker 安装 zookeeper1.2. 安装 storm nimbus1.3.docker 安装 supervisor1.4.docker 安装 storm-ui1.5.查看已经启动的容器1.6.提交topology到 storm集群 2.总结3.参考文档 0.前言 Apache Storm 官方也出了Docker 镜像 https://hub.do…

lua使用心得

lua语言的一些注意事项 在控制结构的条件中除了false和nil为假&#xff0c;其他值都为真。所以Lua认为0和空串都是真。lua5.3之前的版本只支持浮点数&#xff0c;lua5.3才引入了对整数的支持&#xff0c;/仅支持浮点数除法&#xff0c;要实现C里的整除效果必须使用双斜杠//超过…

nodejs+vue+elementui美食网站的设计与实现演示录像2023_0fh04

本次的毕业设计主要就是设计并开发一个美食网站软件。运用当前Google提供的nodejs 框架来实现对美食信息查询功能。当然使用的数据库是mysql。系统主要包括个人信息修改&#xff0c;对餐厅管理、用户管理、餐厅信息管理、菜系分类管理、美食信息管理、美食文化管理、系统管理、…

数据可视化工具的三大类报表制作流程分享

电脑&#xff08;pc&#xff09;、移动、大屏三大类型的BI数据可视化报表制作步骤基本相同&#xff0c;差别就在于尺寸调整和具体的报表布局。这对于采用点击、拖拉拽方式来制作报表的奥威BI数据可视化工具来说就显得特别简单。接下来&#xff0c;我们就一起看看不这三大类型的…

界面组件DevExpress Reporting——支持图表本地化和可绑定属性

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表。 在最近的更新(v23.1)中&#xff0c;官方扩展了…

centos7 部署kubernetes(带自动部署脚本)

目录 一、实验规划 1、规划表 2、安装前宿主机检查 1.配置主机名 2.制作ssh免密&#xff08;VM1中执行&#xff09; 3.修改hosts 文件 4. 修改内核相关参数 5.加载模块 6. 清空iptables、关闭防火墙、关闭交换空间、禁用selinux 7. 安装ipvs与时钟同步 8.配置docker的…

Three.js 监听纹理加载

本文简介 本文介绍 Three.js 的基础方法&#xff1a;监听材质加载。 在 《Three.js 基础纹理贴图》 里介绍了如何给图形贴图&#xff0c;贴图前需要先把纹理加载好。我们基于这篇文章继续讲解如何监听材质加载成功或者失败。 监听单个材质 我们使用 TextureLoader 的 load() 方…

TC3XX - MCAL知识点(二十六):GETH MCAL配置及代码实战(以太网)

目录 1、概述 2、MCAL配置 2.1、配置目标 2.2、ETH配置 2.2.1、EthGeneral 2.2.2、EthCtrlOffloading 2.2.3、EthConfigSet 2.3、Port配置 2.4、IRQ配置 2.5、MC

ChatGPT收录

VSCode插件-ChatGPT 多磨助手 多磨助手 (domore.run) Steamship Steamship 免费合集 免费chatGPT - Ant Design Pro 免费AI聊天室 (xyys.one)

解决flutter showDialog下拉框,复选框等无法及时响应的问题

使用StatefulBuilder _showDialogr() {showDialog(context: context,builder: (BuildContext ctx) {return StatefulBuilder(builder: (BuildContext context, StateSetter setState) {return Scaffold(body: Column(children: <Widget>[Container(height: 400,padding: …