Java中DoubleAdder的实际用法

问题描述 投票:0回答:1

此外,我正在学习多线程。通过AtomicInteger,AtomicBoolean等...时,看到有一类名为DoubleAdder

就像AtomicInteger可以同时被许多线程使用。当我们在多线程环境中使用'AtomicInteger'变量时,我们不需要'synchronized'和'volatile'关键字,因为原子整数会确保线程安全。

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

java multithreading concurrency atomic
1个回答
0
投票

AtomicInteger,AtomicLong和所有其他Atomic变量通常会共享一条缓存行以进行更新。这意味着每次发生写操作时,使用同一Atomic对象的所有线程都将具有高速缓存无效,这将强制执行同步所需的任何速度降低。

在您同时进行大量添加的系统中,以及您不完全依赖值的系统中,准确地使用这些值,则最好使用DoubleAdder。每个线程都有自己的加法器对象(正在递增)(允许每个线程不使另一个线程无效)。最后,您可以向DoubleAdder询问所有线程的增量值的总和。

人们可以想到的使用DoubleAdder的最常见用例是指标或统计信息。通常,您需要对指标进行足够的跟踪,但通常不需要精确的精度。

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

© www.soinside.com 2019 - 2024. All rights reserved.