AtomicInteger 源码以及对CAS的理解

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);
    }

 

转载于:https://my.oschina.net/yixinnemo/blog/1839837

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值