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

时间:2018-06-07 10:50:52

标签: java java-8

Java LongAdderAtomicLong更高效。但是,如果我正确地得到它,它不是ID生成器的好选择,因为没有原子“读取和增量”操作。

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

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

2 个答案:

答案 0 :(得分:7)

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

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

  

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

答案 1 :(得分:6)

首先, Java的LongAdder更高性能,然后AtomicLong 非常正确。如果存在高争用,则会出现这种情况 - 否则它与内部的AtomicLong相同。但即便如此 - 你应该知道它使用了一些额外的空间,以便每个Thread分别计算结果,所以当调用sum时它只收集那些结果。

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