自旋锁
通过AtomicInteger源码来进行举例:
第一步:
AtomicInteger atomicInteger = new AtomicInteger();
atomicInteger.getAndIncrement(); //自增功能
第二步:通过getAndIncrement()进入源码
public final int getAndIncrement() {
return unsafe.getAndAddInt(this, valueOffset, 1);
}
第三步:然后点击:getAndAddInt 方法
public final int getAndAddInt(Object var1, long var2, int var4) {
int var5;
do {
var5 = this.getIntVolatile(var1, var2);
} while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));
return var5;
}
是cas原理解析中用到的自旋,在第三步中 compareAndSwapInt 方法是本地native方法,查看不到源码