当前位置: 首页 > news >正文

沈阳网站推广¥做下拉去118cr陶瓷企业 瓷砖地板公司网站建设

沈阳网站推广¥做下拉去118cr,陶瓷企业 瓷砖地板公司网站建设,免费项目进度管理软件,天空人体网站怎么做现在有三个任务,三个任务之间没有关联关系,但是第四个任务要等前三个完成之后才能进行,于是使用多线程完成前三个任务节省时间 示例代码: public void saveDataByOnlineTimeNew(LocalDateTime startTime, LocalDateTime endTime) {Objects.requireNonNull(startTime, 开…现在有三个任务,三个任务之间没有关联关系,但是第四个任务要等前三个完成之后才能进行,于是使用多线程完成前三个任务节省时间 示例代码: public void saveDataByOnlineTimeNew(LocalDateTime startTime, LocalDateTime endTime) {Objects.requireNonNull(startTime, 开始时间不能为空);Objects.requireNonNull(endTime, 结束时间不能为空);ListUser users baseMapper.selectAllRightUser(startTime, endTime);if (users.isEmpty()) {return;}ListInteger userIdList users.stream().map(User::getId).collect(Collectors.toList());// 创建三个 CompletableFuture 分别处理三个列表CompletableFutureListProUserStatisticsNew future1 CompletableFuture.supplyAsync(() - {ListProUserStatisticsNew proUserStatisticsNews saveDataByOnlineTime(startTime, endTime, userIdList);users.parallelStream().forEach(user - {log.trace(当前线程名字:Thread.currentThread().getName());ListProUserStatisticsNew versionNotInRelationList this.saveDataByOnlineTimeByUser(startTime, endTime, user);if (!versionNotInRelationList.isEmpty()) {proUserStatisticsNews.addAll(versionNotInRelationList);}});return proUserStatisticsNews;});CompletableFutureListProUserStatisticsNew future2 CompletableFuture.supplyAsync(() - saveNoVersionDataByOnlineTime(startTime, endTime, userIdList));CompletableFutureListProUserStatisticsNew future3 CompletableFuture.supplyAsync(() - saveLearnDataByOnlineTime(startTime, endTime, userIdList));// 等待所有 CompletableFuture 完成CompletableFutureVoid allFutures CompletableFuture.allOf(future1, future2, future3);// 等待所有 CompletableFuture 完成后进行合并操作CompletableFutureListProUserStatisticsNew join allFutures.thenApplyAsync(v -mergeLists(future1.join(), future2.join(), future3.join()));ListProUserStatisticsNew result join.join();//ListProUserStatisticsNew result mergeLists(proUserStatisticsNews, noVersionDataList, learnDataList);SysConfigTime sysConfigTimeByTime SysConfigTimeUtil.getSysConfigTimeByTimeForQuery(endTime);result.parallelStream().forEach(one - {one.setRecordDate(sysConfigTimeByTime.getYearmonth());one.setProjectHoursDifference(one.getWorkHours().subtract(one.getActualHours()));});// 批量保存或更新int batchSize 100; // 根据具体要求和系统能力设置适当的批处理大小for (int i 0; i result.size(); i batchSize) {int end Math.min(result.size(), i batchSize);this.saveOrUpdateBatch(result.subList(i, end));}} 代码解析: 这段代码实现了一个方法 saveDataByOnlineTimeNew它通过多个异步任务使用 CompletableFuture并行处理数据并最终将结果批量保存或更新到数据库中。具体的逻辑流程可以分为几个部分下面我会逐步解释每个部分。### 方法说明- **输入参数**: startTime 和 endTime 是查询的开始和结束时间LocalDateTime 类型指定了需要查询的数据范围。- **核心目标**: 这个方法的目标是根据 startTime 和 endTime 获取相关数据并将结果合并后保存或更新到数据库。### 代码分析1. **非空检查**:javaObjects.requireNonNull(startTime, 开始时间不能为空);Objects.requireNonNull(endTime, 结束时间不能为空);这两行代码确保 startTime 和 endTime 不能为空。如果为 null将抛出 NullPointerException并带有指定的错误信息。2. **获取用户列表**:javaListUser users baseMapper.selectAllRightUser(startTime, endTime);if (users.isEmpty()) {return;}这里通过调用 baseMapper.selectAllRightUser(startTime, endTime) 查询所有符合条件的用户。如果查询结果为空则直接返回不进行后续处理。3. **获取用户 ID 列表**:javaListInteger userIdList users.stream().map(User::getId).collect(Collectors.toList());使用 stream 获取所有用户的 ID方便后续操作。4. **创建多个 CompletableFuture**:javaCompletableFutureListProUserStatisticsNew future1 CompletableFuture.supplyAsync(() - {// 异步任务1});CompletableFutureListProUserStatisticsNew future2 CompletableFuture.supplyAsync(() - saveNoVersionDataByOnlineTime(startTime, endTime, userIdList));CompletableFutureListProUserStatisticsNew future3 CompletableFuture.supplyAsync(() - saveLearnDataByOnlineTime(startTime, endTime, userIdList));创建了三个异步任务每个任务执行不同的操作- **future1**调用 saveDataByOnlineTime 来保存基于在线时间的数据然后对每个用户并行处理数据并将结果合并。- **future2**调用 saveNoVersionDataByOnlineTime 来保存没有版本数据的数据。- **future3**调用 saveLearnDataByOnlineTime 来保存学习数据。5. **等待所有异步任务完成**:javaCompletableFutureVoid allFutures CompletableFuture.allOf(future1, future2, future3);使用 CompletableFuture.allOf() 来等待所有的 future1, future2, future3 完成。allOf 返回一个 CompletableFutureVoid表明所有任务已完成。6. **合并结果**:javaCompletableFutureListProUserStatisticsNew join allFutures.thenApplyAsync(v -mergeLists(future1.join(), future2.join(), future3.join()));当所有的异步任务完成后调用 thenApplyAsync 继续处理合并操作。join 方法会阻塞直到每个 CompletableFuture 返回结果合并三个任务的结果列表。7. **结果后处理**:javaListProUserStatisticsNew result join.join();SysConfigTime sysConfigTimeByTime SysConfigTimeUtil.getSysConfigTimeByTimeForQuery(endTime);result.parallelStream().forEach(one - {one.setRecordDate(sysConfigTimeByTime.getYearmonth());one.setProjectHoursDifference(one.getWorkHours().subtract(one.getActualHours()));});- join.join() 等待合并操作完成获得最终的 result 列表。- 使用 SysConfigTimeUtil.getSysConfigTimeByTimeForQuery(endTime) 获取系统配置的时间信息。- 对 result 列表中的每一项设置其记录日期setRecordDate和工作时间差setProjectHoursDifference。8. **批量保存或更新**:javaint batchSize 100;for (int i 0; i result.size(); i batchSize) {int end Math.min(result.size(), i batchSize);this.saveOrUpdateBatch(result.subList(i, end));}为了避免一次性将大量数据写入数据库采用批处理的方式分批保存或更新数据。每次处理 batchSize 条记录这里设定为100直到所有记录处理完。### 关键点总结- **异步任务并行执行**使用 CompletableFuture.supplyAsync() 创建三个并行任务来处理数据从而加快整个处理过程。 - **合并操作**通过 thenApplyAsync 合并三个异步任务的结果。 - **批量操作**为了提高性能使用批量保存或更新的方法 saveOrUpdateBatch避免一次性提交过多数据。### 性能优化 - 该方法使用了并行流 (parallelStream()) 和异步执行CompletableFuture这些可以显著提升性能尤其是对于大规模数据的处理。 - 批量操作减少了数据库访问的次数提高了数据库的写入效率。总的来说这段代码实现了一个高效的数据处理和保存机制使用了现代 Java 特性如异步编程和流操作来优化性能。
http://www.w-s-a.com/news/103824/

相关文章:

  • 医院网站官方微信精神文明建设我做服装设计师的 求推荐资源网站
  • 微信网站建设需要那些资料昆明cms模板建站
  • 安庆网站建设兼职中企动力是500强吗
  • 网站排名优化技巧基于网站的网络营销方法有哪些
  • 摄影素材网站做知识问答的网站
  • 中小企业网站建设济南兴田德润电话门店管理系统软件排行
  • 昆明工程建设信息网站柳州网站建设公司哪家好
  • 如何分析网站关键词北京门户网站网址
  • 做网站与做游戏那个好网站域名怎么起
  • 有没有做cad单的网站银行网站建设方案视频
  • 和各大网站做视频的工作高校网站群管理系统
  • 中国建设人才服务信息网是正规网站怎么注销自己名下的公司
  • 网站开发新型技术那些网站做任务领q币
  • 海口手机网站建设wordpress微支付宝
  • 做公司网站需要几天深圳自定义网站开发
  • 做网站学多长时间可以学会推广软件公司
  • 网络网站设计培训长沙建站模板大全
  • 站群搭建移动端处理器天梯图
  • 岳池发展建设集团有限公司门户网站湛江seo咨询
  • 手机网站工具关键词排名是什么意思
  • 游民星空是谁做的网站沈阳网站托管公司
  • 做网站搭建需要什么人vs2017移动网站开发
  • 购物网站开发需要什么技术怎么查看网站是否备案
  • 学做电商那个网站好网站建设投票主题
  • 中卫网站推广网络营销毕业设计做网站大小有什么要求
  • 做问卷网站义乌网站建设推广专家
  • 不会编程怎样建设网站昆明做网站哪家
  • 直播网站模板新营销平台电商网站
  • 建设部指定招标网站免费的企业查询软件
  • 做前端常用的网站及软件下载平台优化是什么意思