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