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

记一次使用Java8新特性中的parallelStream⭐️数据流引发的接口异常以及解决方法

目录

前言       

正文

代码

分析

问题解决

总结


前言       

        小伙伴们大家好,分享下开发过程中最近遇到的坑,根据新需求,项目的一处模块需要改动,大致说下该模块的流程。。。好像之前有讲过,翻翻看,果然

        是同一个接口,查看这里即可

正文

        简单叙述下这次的故障,接口方法逻辑第一步就是切库,然后去查询相应的数据拼装承集合返回即可,需要做的就是在查询数据时,从另外一个data_point表中查询数据的创建时间,嗯基槽,搞个mapper传一些参数查询出来拼到结果集里就行,三下五除二改好用apipost测试下

        No 接口异常了,哼哼 不慌,打开控制台看看什么问题(滚轮疯狂滑动),显示执行sql时主库里没有该表(废话,有表还切库干嘛)等等我不是切库了吗,继续往上翻,没发现切库异常报错呀,莫慌打个断点调试下,纳尼 切库确实没问题啊,怎么新增的mapper这里就窜到主库里去了

        two thousand year later...各种方法都试过了(去除缓存,另起一个mapper,chatGpt...)最后找大佬同事帮哈忙瞅了瞅,找到问题了,大家伙看标题应该就知道了,没错异步stream流的问题,来看下事发代码

代码

visitDateForSubjectList.parallelStream()
//                .filter(visitData -> !this.checkTaskIsOutGroup(visitData, settings))
                .forEach(visitData -> blockList.stream().filter(e -> e.getIInsId().equals(visitData.getInstanceId())).forEach(block -> {
                    setBlockRelatedDate(block, dataPointList, dataPageList);
                    subjectTaskVOList.add(this.setSubjectTaskRelatedDate(timeMap, subjectId, visitData, block, forms, settings));
                }));

分析

        这里调用了新特性数据流,然后在这里新建一个线程异步去拼接一部分数据,巧了,新增的代码正好让我给加到这里的this调用的方法中了,但是新建的线程并不会走控制层的切库方法,导致直接到主库里查询,然后报错

Java中的parallelStream是Java 8引入的一个功能,它允许以并行方式处理数据流。当使用parallelStream时,数据处理会分布到多个线程上,这些线程通常是从ForkJoinPool中获取的,默认情况下其线程数目取决于运行时机器的CPU核心数目。

问题解决

        发现问题后面就容易了,异步调用中不能切库(测试过有问题)是吧,那就直接在对需要进行数据流处理的集合抢先一步操作, 代码如下,先一步处理需要改动的数据,流厘米按需要赋值的时候直接从map中取即可,改造完成,跑一下没有异常 OVER.

总结

        大胆怀疑,这里因为是对原有的代码改造,导致太过于信赖原生代码,一直在检查自己代码,迷失了方向,所以说小伙伴们要大胆质疑,勇于实践!



http://www.kler.cn/a/158392.html

相关文章:

  • 手写promise A+、catch、finally、all、allsettled、any、race
  • 【CTA认证】Android CTA资料及信息安全要求
  • 微信小程序之猜数字和猜拳小游戏
  • Java导出word
  • 为什么游戏公司不太愿意采用“微服务”架构?
  • 【FreeRTOS】消息队列——简介、常用API函数、注意事项、项目实现
  • python中的集合
  • IDEA中,光标移动快捷键(Shift + 滚轮前后滚动:当前文件的横向滚动轴滚动。)
  • 深入理解 Vue 组件:构建优雅的前端应用
  • JAVA代码优化:Token验证处理
  • Isaac Sim教程05 机器人简单组装及传感器
  • 特殊二叉树——堆
  • 直播预告 | 降本增效持续深化,如何找准 FinOps 关键着力点?
  • 12月5日作业
  • 多线程--11--ConcurrentHashMap
  • 记一次若依二开的简单流程
  • mysql原理--InnoDB记录结构
  • vivado时序方法检查1
  • 【Effective C++】条款2:尽量以const,enum,inline替换#define
  • leetCode 90.子集 II + 回溯算法 + 图解 + 笔记