LongAdder

来源:3-2 线程安全性-原子性-atomic-2

qq_李永强_03881041

2018-05-04

老师关于我上个问题我看了您的回复,我感觉我想问的并不是伪共享相关的问题。而是一个LongAdder类型是将Long型变量分段进行计算最后把每段的计算结果累加得到最终结果。不知道我说的对吗?我想问的是如何保证这些个分好的段可以进行原子性操作,也就是每一小段都不被其他线程影响,保证最后累加计算出来的结果是正确的。我看了源码里面好像有涉及到localthread不知道跟这个有没有关,源码有点没看懂。老师不知道这次我问明白了吗

写回答

1回答

Jimin

2018-05-04

你好,我猜想你也是没细看我之前给你的链接,为了保证其他人看着方便,我再贴一下链接:https://github.com/aCoder2013/blog/issues/22

这里有这样一段(就在我提到伪共享下面,他会将每个【线程】的操作hash到【不同的 cells数组】中,通过不一样的cas去做更新的,这也是性能比AtomicLong好的根本所在,只要不发生伪共享,就不会有问题):

//img.mukewang.com/szimg/5aec743c0001117a13641280.jpg

这里的源码注释很好,我感觉可以细细研究一下~


1
0

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程