java - LongAdder 是 ID 生成器的错误选择吗?

标签 java java-8

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

我问这个是因为我看到有人推荐它用于 ID 生成,但我看不出有什么意义,因为每次操作都会调用 sum()

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

最佳答案

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

正如 javadoc 所说,这个类对于收集统计数据以及竞争可能很高的情况很有用:

This class is usually preferable to AtomicLong when multiple threads update a common sum that is used for purposes such as collecting statistics, not for fine-grained synchronization control.

关于java - LongAdder 是 ID 生成器的错误选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50739351/

相关文章:

java - 如何在 Ubuntu 中将 Java 版本 1.7 更改为 1.8?

java - 如何在一个方法中实现等待另一个方法在java中完成?

java - 我 'hydrate' 对象图在哪一层?

java - 可以阻止 Eclipse 自动打开新文件吗?

tree - 是否可以使用 Java 8 Streams 构建 Tree 数据模型

java - 通用参数可重用性

java - 来自 Linux 客户端的请求出现 SPNEGO/Kerberos No credential found 错误

java - 根据 Flask 请求自动将 JSON 转换为对象

java - 如何从 DirectoryStream 制作流

java - 如何比较二维数组