📅  最后修改于: 2023-12-03 15:31:49.979000             🧑  作者: Mango
AtomicLong
是 Java 中的原子类,它可以确保对 long 类型的操作是原子的。在并发编程中,使用原子类可以避免因为竞争条件引起的不可预知的结果。
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 保证了 sum
和 count
的操作都是原子的,防止了出现竞争条件。