请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

正在回答

1回答

感觉这篇文章你没看完啊,代码里判断cpu那里,紧接着就是“重新计算hash(异或)从而尝试找到下一个空的slot”,在总结里也写着“数组访问索引是通过Thread里的threadLocalRandomProbe域取模实现的,这个域是ThreadLocalRandom更新的,cells的数组大小被限制为CPU的核数,因为即使有超过核数个线程去更新,但是每个线程也只会和一个CPU绑定,更新的时候顶多会有cpu核数个线程,因此我们只需要通过hash将不同线程的更新行为离散到不同的slot即可。”
从你的问题里,我隐约感觉你好像没抓住核心,这里cpu本身不是关键,因为实际中虽然会有很多并发的场景,而同时操作同一个点的线程会少很多,因为业务逻辑基本会限制某个数据被同时更新的次数
关于这个类的核心这篇文章也总结到了:在无竞争的情况下直接更新base域,在第一次发生竞争的时候(CAS失败)就会创建一个大小为2的cells数组,每次扩容都是加倍。这是核心的原理,其他操作都是围绕这个原理做些优化及细节处理。

0 回复 有任何疑惑可以回复我~
  • 提问者 红邮筒 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-01-02 14:43:44
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号