📌  相关文章
📜  Java中的 LongAccumulator longValue() 方法及示例(1)

📅  最后修改于: 2023-12-03 14:42:49.574000             🧑  作者: Mango

Java中的 LongAccumulator longValue() 方法及示例

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 类进行累加操作,最终结果是正确的。