什么是CAS?
-
CAS即Compare And Swap,就是把一个期望值与变量的当前值进行比较,如果当前变量的值与期望值相等,就使用这个新值来代替当前变量的值。
-
下面是模拟CAS的代码:
public class SimulatedCAS { private volatile int value; public synchronized int compareAndSwap(int expectedValue, int newValue){ int oldValue = value; if (oldValue == expectedValue) { value = newValue; } return oldValue; } }
源码分析
-
Java中是如何利用CAS来实现原子操作的?
- AtomicInteger加载Unsafe工具类,用来直接操作内存数据
- 用Unsafe来操作底层数据
- 用volatile修饰value,保证可见性
-
Unsafe是CAS的核心类。提供了硬件级别的原子操作。
-
valueOffest表示的是变量值在内存中的偏移地址。