ActomicInteger源码分析

yPhantom 2019年10月31日 33次浏览

参考文章:掘金

原子整数类。先看成员变量:

    private static final Unsafe unsafe = Unsafe.getUnsafe();
    private static final long valueOffset;

    static {
        try {
            valueOffset = unsafe.objectFieldOffset
                (AtomicInteger.class.getDeclaredField("value"));
        } catch (Exception ex) { throw new Error(ex); }
    }

    private volatile int value;

ActomicInteger类的核心思想就是CAS,即先比较再替换。将内存对应的值与预期值比较,如果匹配则更新。

因此从上述成员变量来看,value是ActomicInteger的真正的值,volatile表示多线程可见。而valueOffset存储的就是value的地址偏移。

而根据Java的类加载机制,先执行类构造器(clinit),再执行对象构造器(init)。因此valueOffset就是针对value的偏移。