首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于ID生成器来说,LongAdder是一个错误的选择吗?

对于ID生成器来说,LongAdder是一个错误的选择吗?
EN

Stack Overflow用户
提问于 2018-06-07 10:50:51
回答 2查看 191关注 0票数 9

Java的LongAdderAtomicLong更具有性能。然而,如果我是正确的,这不是一个好的选择ID生成器,因为没有原子的‘读和增量’操作。

我之所以问这个问题,是因为我看到人们推荐它用于ID生成,而且我不明白这一点,因为每个操作都会调用sum()

对于简单的长ID生成器来说,LongAdder是一个好选择还是坏选择?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-07 11:02:28

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

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

当多个线程更新一个用于收集统计信息,而不是用于细粒度同步控制的公共和时,这个类通常比AtomicLong更好。

票数 8
EN

Stack Overflow用户

发布于 2018-06-07 11:05:41

首先,Java的LongAdder具有更高的性能,而AtomicLong也不是很正确。如果在这个问题上存在很大的争议,情况就是如此--否则,它在内部与AtomicLong是一样的。但即使如此-您应该知道,它使用一些额外的空间,以便每个线程分别计算结果,因此,当sum被调用时,它只是收集这些结果。

但是无论如何,对于ID生成器来说绝对不是一个好的选择。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50739351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档