📅  最后修改于: 2023-12-03 14:42:49.574000             🧑  作者: Mango
LongAccumulator
是Java中的一个原子类,定义了一种可更新的long型数值。它支持对数值进行累加操作,并且保证在多线程环境下的线程安全。
longValue()
方法是 LongAccumulator
类中的一个实例方法,其作用是获取该 LongAccumulator
实例的当前值。
public long longValue()
LongAccumulator
实例的当前值。下面是一个示例代码,演示了在多个线程中对 LongAccumulator
进行累加操作,并通过 longValue()
方法获取其当前值。
import java.util.concurrent.atomic.LongAccumulator;
public class LongAccumulatorDemo {
public static void main(String[] args) throws InterruptedException {
LongAccumulator accumulator = new LongAccumulator(Long::sum, 0);
Thread[] threads = new Thread[10];
for (int i = 0; i < threads.length; i++) {
threads[i] = new Thread(() -> {
long value = accumulator.longValue();
System.out.println(Thread.currentThread().getName() + " get the value: " + value);
accumulator.accumulate(1);
});
}
for (Thread thread : threads) {
thread.start();
}
for (Thread thread : threads) {
thread.join();
}
long finalValue = accumulator.longValue();
System.out.println("Final value: " + finalValue);
}
}
代码中首先创建了一个 LongAccumulator
对象,通过 Long::sum
操作指定了累加的方式,并初始化为 0。
然后创建了 10 个线程,每个线程先通过 longValue()
方法获取当前的值,并打印到控制台上,在累加 1。
最后通过 longValue()
方法获取最终的结果值,并打印到控制台上。
运行该代码,可以看到以下输出:
Thread-3 get the value: 0
Thread-5 get the value: 0
Thread-2 get the value: 0
Thread-1 get the value: 0
Thread-0 get the value: 0
Thread-7 get the value: 0
Thread-6 get the value: 0
Thread-4 get the value: 0
Thread-8 get the value: 0
Thread-9 get the value: 0
Final value: 10
可以看到,在多线程环境下,使用 LongAccumulator
类进行累加操作,最终结果是正确的。