Java 中 DoubleAdder 的实际用途

Practical Uses for DoubleAdder in Java

我正在学习多线程。通过 AtomicInteger、AtomicBoolean 等...看到有一个 class 名为 DoubleAdder

像AtomicInteger一样可以被多个线程并发使用。当我们在多线程环境中使用 'AtomicInteger' 变量时,我们不需要 'synchronized' & 'volatile' 关键字,因为原子整数负责线程安全。

有人可以详细说明 DoubleAdder class 的用例吗?

AtomicInteger、AtomicLong 和所有其他 Atomic 变量通常会共享一个缓存行以进行更新。这意味着每次发生写入时,使用相同 Atomic 对象的所有线程都将有一个缓存失效,这将强制同步所需的任何减速。

在您并发添加很多的系统中,以及您不依赖于准确准确的值的系统中,DoubleAdder 是最好的。每个线程都有自己的加法器对象,它正在递增(允许每个线程不会使另一个线程无效)。最后,您可以向 DoubleAdder 询问所有线程递增值的总和。

可以想到的使用 DoubleAdder 的最常见用例是指标或统计数据。通常您需要足够好的指标跟踪,但通常不需要精确度。

最后,当所有线程都停止时,如果您向 DoubleAdder 询问所有线程的总和,那么您将获得 100% 的准确率。