五、原子类

2018-08-21  本文已影响0人  小绵羊你毛不多

原子类

为什么要用原子类

原理

CAS(Compare-and-Swap)

当且仅当V==A时,V讲被赋值为B,否则循环判断V是否与A相等

Atomic包主要提供四种原子更新方式

  1. 更新基本类型
    • AtomicInteger、AtomicBoolean、AtomicLong
public class AtomicInteger extends Number implements java.io.Serializable {
     private static final Unsafe unsafe = Unsafe.getUnsafe();
     
     public final int incrementAndGet() {
     //为什么返回的时候 要再一次+1?看下面这个方法的返回值就知道了
        return unsafe.getAndAddInt(this, valueOffset, 1) + 1;
    }
}
    public final int getAndAddInt(Object var1, long var2, int var4) {
        int var5;
        do {
        //获取原来的值
            var5 = this.getIntVolatile(var1, var2);
        } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));
//这里返回的是var5,也就是原来的值,更新后的值是var5+var4
        return var5;
    }
// 是一个native方法 
    public final native boolean compareAndSwapInt(Object var1, long var2, int var4, int var5);
  1. 更新数组
  1. 更新引用
  1. 更新字段
上一篇下一篇

猜你喜欢

热点阅读