采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
以前问的问题没有回答,下面是整个问题描述,麻烦老师看一下
感觉这篇文章你没看完啊,代码里判断cpu那里,紧接着就是“重新计算hash(异或)从而尝试找到下一个空的slot”,在总结里也写着“数组访问索引是通过Thread里的threadLocalRandomProbe域取模实现的,这个域是ThreadLocalRandom更新的,cells的数组大小被限制为CPU的核数,因为即使有超过核数个线程去更新,但是每个线程也只会和一个CPU绑定,更新的时候顶多会有cpu核数个线程,因此我们只需要通过hash将不同线程的更新行为离散到不同的slot即可。”从你的问题里,我隐约感觉你好像没抓住核心,这里cpu本身不是关键,因为实际中虽然会有很多并发的场景,而同时操作同一个点的线程会少很多,因为业务逻辑基本会限制某个数据被同时更新的次数关于这个类的核心这篇文章也总结到了:在无竞争的情况下直接更新base域,在第一次发生竞争的时候(CAS失败)就会创建一个大小为2的cells数组,每次扩容都是加倍。这是核心的原理,其他操作都是围绕这个原理做些优化及细节处理。
非常感谢!
登录后可查看更多问答,登录/注册
构建完整并发与高并发知识体系,倍增高薪面试成功率!
2.0k 1
1.4k 18
1.4k 15
4.0k 12
1.6k 12
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号