Java CAS(Compare And Swap)机制详解
一、概述
CAS(Compare And Swap,比较并交换) 是一种无锁(Lock-Free)的多线程同步机制,它基于硬件提供的原子性操作来实现线程安全。CAS 是现代并发编程中的核心技术,广泛应用于 Java 并发包中。
二、核心原理
1. 操作语义
CAS 操作包含三个参数:
- V:要更新的内存地址(变量)
- A:旧的预期值(Expected Value)
- B:要设置的新值(New Value)
2. 执行流程
boolean cas(Object v, Object a, Object b) {
if (v == a) {
// 比较:当前值是否等于预期值
v = b;
// 交换:设置新值
return true;
// 成功
} else {
return false;
// 失败
}
}
3. 硬件支持
CAS 操作在硬件层面是原子的,主要通过以下方式实现:
- x86/64 架构:
CMPXCHG(Compare and Exchange)指令 - ARM 架构:
LDREX/STREX(Load-Exclusive/Store-Exclusive)指令 - MIPS 架构:
LL/SC(Load-Linked/Store-Conditional)指令
三、Java 中的 CAS 实现
1. sun.misc.Unsafe 类
Java 通过 Unsafe 类提供底层 CAS 操作:
import sun.misc.Unsafe;
import java.lang.reflect.Field;
public class CASExample {
private static Unsafe unsafe;
private volatile int value;
private static valueOffset;
{
{
Unsafe.class.getDeclaredField();
field.setAccessible();
unsafe = (Unsafe) field.get();
valueOffset = unsafe.objectFieldOffset(CASExample.class.getDeclaredField());
} (Exception e) {
(e);
}
}
{
unsafe.compareAndSwapInt(, valueOffset, expectedValue, newValue);
}
}

