//根据传入的参数初始化实际值,默认值为0
public AtomicLong(long initialValue) {
value = initialValue;
}
接下来我们主要看一下几个更新方法
//以原子方式更新值为传入的newValue,并返回更新之前的值
public final long getAndSet(long newValue) {
return unsafe.getAndSetLong(this, valueOffset, newValue);
}
//输入期望值和更新值,如果输入的值等于预期值,则以原子方式更新该值为输入的值
public final boolean compareAndSet(long expect, long update) {
return unsafe.compareAndSwapLong(this, valueOffset, expect, update);
}
//返回当前值原子加1后的值
public final long getAndIncrement() {
return unsafe.getAndAddLong(this, valueOffset, 1L);
}
//返回当前值原子减1后的值
public final long getAndDecrement() {
return unsafe.getAndAddLong(this, valueOffset, -1L);
}
//返回当前值原子增加delta后的值
public final long getAndAdd(long delta) {
return unsafe.getAndAddLong(this, valueOffset, delta);
}
public final long getAndAddLong(Object var1, long var2, long var4) {
long var6;
do {
//根据var1和var2得出当前变量的值,以便接下来执行更新操作
var6 = this.getLongVolatile(var1, var2);