http://blog.csdn.net/hsuxu/article/details/9467651
CAS是Compare and Swap的简写,比较然后交换。
以类AtomicInteger中的compareAndSet方法为例,可以看到调用的是unsafe中的compareAndSwapInt来实现的,并没有使用锁。
public final boolean compareAndSet(int expect, int update) {
return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
}
这里要注意的是valueOffset,是通过unsafe方法中的objectFieldOffset来取得AtomicInteger中对应的value的偏移量valueOffset。
static {
try {
valueOffset = unsafe.objectFieldOffset
(AtomicInteger.class.getDeclaredField("value"));
} catch (Exception ex) { throw new Error(ex); }
}
private volatile int value;
剩下才是关键就是unsafe类了,Unsafe分析: