📜  Java中的 LongAdder sum() 方法及示例(1)

📅  最后修改于: 2023-12-03 15:31:53.834000             🧑  作者: Mango

Java的LongAdder sum()方法及示例

在Java中,计算多个线程的总和时,常常需要使用原子操作,以避免线程安全问题。LongAdder是Java SE8中提供的一种新的原子类,可以用于累加器的操作。其中,sum()方法可以计算所有添加到累加器中的整数和,这个方法继承自Number类,因此可以返回一个long型。

LongAdder类

LongAdder是一个Java并发包中的类,用于原子地累加一个整数。它是Java SE8中新增加的一个类,用于解决各种高并发场景下的竞争问题。

LongAdder的主要作用是在高并发的场景下提高多线程计数的效率。在使用LongAdder时,数值会被分散到多个单元之中,每个单元独立进行累加操作,线程之间相互独立不会产生竞争,因此可以充分利用硬件的多核特性。

sum()方法

LongAdder类中的sum()方法,实现了对所有单元的累加操作,并返回它们的总和。

它的方法签名如下所示:

public long sum()

示例程序如下:


import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.LongAdder;

public class LongAdderExample {

    private LongAdder longAdder = new LongAdder();

    public void increment() {
        longAdder.increment();
    }

    public long getSum() {
        return longAdder.sum();
    }

    public static void main(String[] args) throws InterruptedException {

        LongAdderExample example = new LongAdderExample();
        ExecutorService executorService = Executors.newCachedThreadPool();

        for (int i = 0; i < 10; i++) {
            executorService.execute(() -> {
                for (int j = 0; j < 10000; j++) {
                    example.increment();
                }
            });
        }
        executorService.shutdown();
        executorService.awaitTermination(1, TimeUnit.MINUTES);

        System.out.println(example.getSum());
    }
}

在这个例子中,我们创建了一个LongAdderExample对象,并使用10个线程累加10000次,然后使用getSum()方法计算总和,并输出结果。

总结

在Java的高并发编程中,LongAdder是非常有用的类。它可以应用在累加器操作中,避免了线程安全问题,并且高效地完成多线程的计数操作。sum()方法则是用来计算累加器的总和。