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

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

Java中的 AtomicLong getAndUpdate() 方法及示例

什么是 AtomicLong

AtomicLong 是 Java 中的原子类,它可以确保对 long 类型的操作是原子的。在并发编程中,使用原子类可以避免因为竞争条件引起的不可预知的结果。

AtomicLong getAndUpdate() 方法

getAndUpdate(longUnaryOperator) 方法返回当前 AtomicLong 对象的值,并在操作后更新该值。更新是由给定的 longUnaryOperator 函数执行的。函数接受原始值作为输入,计算新值,并返回更新前的旧值。

语法如下:

public final long getAndUpdate(LongUnaryOperator updateFunction)

参数:

| 名称 | 作用 | | ---------------- | ------------------ | | updateFunction | 更新函数 |

返回值:

  • 调用该方法前的 AtomicLong 对象的值

示例:

AtomicLong atomicLong = new AtomicLong(10);
long oldValue = atomicLong.getAndUpdate(x -> x + 5);

经过上述代码执行后,oldValue 的值为 10,atomicLong 的值为 15。

示例

下面是一个具有规则的示例,计算平均数。

import java.util.concurrent.atomic.AtomicLong;

public class AtomicLongDemo {

    private AtomicLong sum = new AtomicLong(0);
    private AtomicLong count = new AtomicLong(0);

    public void addValue(long value) {
        sum.getAndUpdate(x -> x + value);
        count.getAndIncrement();
    }

    public double getAverage() {
        long sum = this.sum.get();
        long count = this.count.get();
        if (count == 0) {
            return 0;
        }
        return (double) sum / count;
    }
}

上述代码中,addValue 方法将传入的值累加到 sum 中,并将 count 值加 1。 getAverage 方法将计算并返回平均值。 AtomicLong 保证了 sumcount 的操作都是原子的,防止了出现竞争条件。