首页 > 解决方案 > LongAdder 是 ID 生成器的错误选择吗?

问题描述

Java 的LongAdder性能更高AtomicLong。但是,如果我正确理解了这一点,那么它对于 ID 生成器来说不是一个好的选择,因为没有原子的“读取和递增”操作。

我问这个是因为我看到人们推荐它用于 ID 生成,我没有看到这一点,因为sum()每次操作都会调用它。

简单的长 ID 生成器是LongAdder好还是坏的选择?

标签: javajava-8

解决方案


我想你已经回答了你自己的问题。从单线程生成 id 绝对是矫枉过正,并且在多线程场景中不可用,因为没有类似原子incrementAndGet的操作。所以答案必须是这不是一个好的选择。

正如 javadoc 所说,这个类对于收集统计信息等可能很高的争用很有用:

当多个线程更新用于收集统计信息等目的的公共总和时,此类通常更可取AtomicLong,而不是用于细粒度的同步控制。


推荐阅读