首页 新闻 会员 周边 捐助

2020-10-18:java中LongAdder和AtomicLong有什么区别?

0
[待解决问题]

2020-10-18:java中LongAdder和AtomicLong有什么区别?#福大大架构师每日一题#

福大大架构师每日一题的主页 福大大架构师每日一题 | 初学一级 | 园豆:2
提问于:2020-10-18 07:38
< >
分享
所有回答(1)
0

AtomicLong
实现机制:基于 CAS(Compare-And-Swap)操作实现的。
性能:适合低争用场景。如果多个线程频繁更新同一个 AtomicLong,可能会导致性能瓶颈,因为所有线程都在竞争同一个原子变量。
使用场景:适用于更新频率较低的情况。
LongAdder
实现机制:基于分段锁和分散热点的思想。内部维护一个基于分段的数组,每个线程更新时更新不同的段(Cell),这样减少了线程之间的竞争。
性能:在高争用场景下性能更佳,因为减少了线程之间的竞争。
使用场景:适用于高频率更新的情况,能更好地利用多核 CPU 的能力。
总结
在低争用下,两者性能相似。
在高争用下,LongAdder 通常比 AtomicLong 更高效。
LongAdder 的数据最终一致性需要通过 sum() 方法计算,适合用于统计计数而非精确计数。

hty1900 | 园豆:202 (菜鸟二级) | 2024-10-14 10:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册