记录一个小BUG(并行流&字符串拼接)

场景:线上日志输出调用外部接口错误

处理过程:

1。日志排查找到调用的外部接口链接

2。查询调用日志方法请求参数

3。手动执行部分参数看调用是否有问题

4。沟通相应开发查看运行日志,同时排查相关代码查看错误原因

问题定位:

1。该方法请求参数拼接有问题,拼接结果并不是每个元素间有一个分隔符,有可能会有多个连续分隔符

2。服务提供方请求日志查询结果显示有超长请求参数导致转换long类型异常

问题分析:

1。StringBuffer虽然是线程安全的,但是只能保证append方法拼接不产生并发异常,并不能保证多个方法同时使用时按既定顺序执行

2。并行流运行过程会产生多个同时执行的子线程,类似于并发情况

问题修复:

取消并行流方式调用改为foreach即可

自测:

提取这部分代码进行单元测试,对比改动前后产生效果数据,与预期一致

总结:

没有吃透一个技术点的时候不要随意应用,不然产生问题都无法具体定位。

并且,并行流并不适合作为处理业务逻辑产生新数据的调用,更适合作为一种筛选本身数据或校验的形式使用。

当并行流调用元素集合过大时,可能会产生阻塞,并且由于单个子线程只处理一个集合内的元素,所以效率并没有想象中的快速,如果有复杂的业务逻辑还是推荐使用线程池。

以上问题排查处理时间约 1小时

一杯水,一盒烟,一堆屎山看一天~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值