第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

parallelStream使用不當(dāng)引發(fā)的血案

標(biāo)簽:
Java

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. 查看parallelStream的源码

    https://img1.sycdn.imooc.com//5d5e58d80001aee007590405.png

    parallelStream源码

    .

  2. parallelStream是创建一个并行的Stream,而且他的并行操作是不具备线程传播性的,所以在使用会话管理器的时候是无法获取值的.

问题总结

parallelStream是一把双刃利器,他的并行操作可以在很多时候作为提升效率的一把利刃。但是使用的时候仍需要注意一些东西,以免伤到自己。

作者:jsondream
链接:https://www.jianshu.com/p/5a49b10f3cfd


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消