在了解和看AbstractQueuedSynchronizer的源码时,经常出现了compareAndSetHead和compareAndSetTail,这两个方法底层都是调用了unsafe.compareAndSwapObject(this, valueOffset, expect, update);
这个方法是主要是利用了CPU的CAS指令,即是CAS算法。
该方法的主要逻辑是
if (this == expect) { this = update return true; } else { return false; }
这样我们可以理解CAS为:
CAS有3个参数值,内存值V(this),旧的值A(expect)和要新值B(update)。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。