parallelStream使用不当引发的血案

Stream简洁

众所周知,java8的新特性中出了lambda表达式之外最受人关注的还有stream一系列的api。
parallelStreamstream中的一个很受开发者喜欢的api,喜欢的同时,如果你使用不当也会造成一些在你看来莫名其妙的问题。
下面我就跟大家说一下在我是如何使用不当遇到那个让我感到奇怪的问题

问题场景描述

  1. 我们的系统中使用了一个会话管理器的东西,就是利用ThreadLocal来制造了一个线程变量,存放每次请求的会话线程的线程变量。
  2. 有一个程序变量需要遍历取值,并且需要对其中的值和线程变量的值来做业务判断,进行处理.
  3. 之前使用Stream进行流操作,未发生任何异常.

问题发生情况描述

  1. 想使用parallelStream提升遍历性能,就将stream改成了parallelStream.
  2. 这时候重启调试之后,请求这个api,总是发生空指针的异常.

问题定位

  1. 因为使用了lambda表达式,所以控制台只是提示parallelStream的遍历这一行报错(这也是使用lambda的不便之处,调错没有之前方便)
  2. 使用debug一步步跟随调试,发现错误定位在了会话管理器获取线程变量这一行

问题思考

  1. 之前在使用stream这个API的时候没有发生问题,便思考到了是parallelStream的原因使得程序产生了问题.
  2. 那么parallelStream怎么会影响我们的会话管理器取得线程变量呢.

问题解决

  1. 查看par
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值