【发布时间】:2015-08-21 20:28:51
【问题描述】:
我看到了 Java 的 AtomicInteger 如何在内部与 CAS(比较和交换)操作一起工作。基本上当多个线程尝试更新值时,JVM 内部会使用底层的 CAS 机制并尝试更新值。如果更新失败,则使用新值重试,但永远不会阻塞。
在 Java8 中,Oracle 引入了一个新的类 LongAdder,它在高竞争下似乎比 AtomicInteger 表现更好。一些博客文章声称 LongAdder 通过维护内部单元格表现更好 - 这是否意味着 LongAdder 在内部聚合值并稍后更新?您能帮我了解一下 LongAdder 的工作原理吗?
【问题讨论】:
-
起初我想我误解了你。再次阅读您的问题,我认为您的想法是正确的。
-
谢谢!我更感兴趣的是了解这些内部细胞是如何组织的?假设有 100 个线程试图更新值,创建了多少个内部单元格以及它们是如何更新的?
-
关于实现细节的此类问题,我建议您参考来源。它实际上很容易阅读和理解。请参阅我的更新答案以获取最新版本的链接。
标签: java concurrency