AtomicInteger 源码以及对CAS的理解

原创
2018/07/04 10:38
阅读数 42
public class AtomicInteger extends Number implements java.io.Serializable {
    private static final long serialVersionUID = 6214790243416807050L;

    // setup to use Unsafe.compareAndSwapInt for updates
    private static final Unsafe unsafe = Unsafe.getUnsafe();
    private static final long valueOffset;

    static {
      try {

       //获取value属性对于AtomicInteger的内存偏移量 
        valueOffset = unsafe.objectFieldOffset
            (AtomicInteger.class.getDeclaredField("value"));
      } catch (Exception ex) { throw new Error(ex); }
    }

    private volatile int value;

    ...

     public final boolean compareAndSet(int expect, int update) {

        //this 代表AtomicInteger对象 ,

        //valueOffset  value 属性的内存偏移量,jvm将根据此偏移量获取value在内存中的地址从而获取内存中实际的值。 

        //如果实际的值等于expect, 则将update值set到地址指向的内存 。 
        return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
    }

 

展开阅读全文
CAS
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部