1. 程式人生 > >有了LongAdder還需要AtomicLong嗎?

有了LongAdder還需要AtomicLong嗎?

and 無法 需求 還需要 sum() 很多 返回 滿足 基本

眾所周知LongAdder在高並發場景下比AtomicLong高效很多,在低並發時基本持平,其原理就不說了,很多文章都有提到。

那麽問題來了,既然如此iAtomicLong還有使用的必要嗎?

我們來看看一個最常見的應用場景:多線程獲取一個唯一的遞增id。

AtomicLong提供 long incrementAndGet(),可以滿足需求,該方法返回加1後的值,且是原子操作。多線程情況下不會有id重復。

LongAdder提供void increment() 註意這個操作並無返回值,只能保證原子遞增,獲取返回值還要調用long sum()。

也就是說,在自增與求和操作之間的會有並發更新,多線程情況下會有id重復,比如原值為2,可能會有兩個線程同時獲取到4.

因此這個場景下因該使用LongAdder無法勝任。

有了LongAdder還需要AtomicLong嗎?