java如何实现cas
Java 实现 CAS 的方法
CAS(Compare-And-Swap)是一种无锁并发编程技术,Java 中可以通过 java.util.concurrent.atomic 包中的原子类实现。
使用 AtomicInteger 实现 CAS
import java.util.concurrent.atomic.AtomicInteger;
public class CASExample {
private AtomicInteger counter = new AtomicInteger(0);
public void increment() {
int oldValue;
int newValue;
do {
oldValue = counter.get();
newValue = oldValue + 1;
} while (!counter.compareAndSet(oldValue, newValue));
}
public int getCounter() {
return counter.get();
}
}
使用 Unsafe 类实现 CAS
如果需要更底层的控制,可以通过 sun.misc.Unsafe 类实现 CAS 操作。
import sun.misc.Unsafe;
public class UnsafeCASExample {
private volatile int value;
private static final Unsafe unsafe = Unsafe.getUnsafe();
private static final long valueOffset;
static {
try {
valueOffset = unsafe.objectFieldOffset
(UnsafeCASExample.class.getDeclaredField("value"));
} catch (Exception ex) { throw new Error(ex); }
}
public boolean compareAndSwap(int expected, int newValue) {
return unsafe.compareAndSwapInt(this, valueOffset, expected, newValue);
}
public int getValue() {
return value;
}
}
自定义 CAS 实现
可以通过 synchronized 或 Lock 模拟 CAS 操作。
public class CustomCAS {
private int value;
public synchronized boolean compareAndSet(int expected, int newValue) {
if (value == expected) {
value = newValue;
return true;
}
return false;
}
public synchronized int getValue() {
return value;
}
}
CAS 的实现原理
CAS 操作包含三个操作数:内存位置(V)、预期原值(A)和新值(B)。当且仅当 V 的值等于 A 时,CAS 才会将 V 的值更新为 B,否则不执行任何操作。整个操作是原子性的。
CAS 的优缺点
优点:
- 无锁操作,减少线程阻塞,提高并发性能
- 避免死锁问题
缺点:

- ABA 问题(可以通过版本号或时间戳解决)
- 循环时间长时 CPU 开销较大
- 只能保证一个共享变量的原子操作






