什么是CAS:
CAS:Compare And Swap (Compare And Exchange) / 自旋 / 自旋锁 / 无锁 ,因为经常配合循环操作,直到完成为止,所以泛指一类操作。让我们看看下面这张图:
CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。 如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值 。否则,处理器不做任何操作。无论哪种情况,它都会在 CAS 指令之前返回该 位置的值。
CAS底层实现
现在让我们跟着源码一步步看看CAS操作是如何实现的呢
AtomicInteger:
public final int incrementAndGet() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return next;