AtomicInteger 类利用 CAS (Compare and Swap) + volatile + native 方法来保证 原子操作, 从而避免 synchronized 的高开销, 执行效率大为提升 。
CAS 的原理, 是拿期望值和原本的值作比较, 如果相同, 则更新成新的值 。
UnSafe 类的 objectFieldOffset() 方法是个本地方法, 这个方法是用来拿“原值”的 内存地址, 返回值是 valueOffset; 另外, value 是一个 volatile 变量, 因此 JVM 总是可以保证任意时刻的任何线程总能拿到该变量的最新值。
valueOffset = unsafe.objectFieldOffset
(AtomicInteger.class.getDeclaredField(“value”));
private volatile int value;