1.什么CAS
CAS 是 Compare and Swap(比较并交换)的缩写,是一种用于实现多线程同步的原子操作。CAS 操作包括三个步骤:比较内存中的值和预期值,如果相等则将新值写入内存,否则不做任何操作。CAS 操作是一种乐观锁的实现方式,它可以避免使用传统的锁机制(如 synchronized)带来的性能开销和死锁问题。
2.应用场景
乐观锁:CAS 操作可以用于实现乐观锁机制,通过比较并交换来实现数据的并发控制。
原子操作:CAS 操作可以用于实现原子操作,如原子更新操作、原子加减操作等,保证操作的原子性。
自旋锁:CAS 操作可以用于实现自旋锁,避免线程进入阻塞状态,提高并发性能。
线程安全的计数器:使用 AtomicInteger 或 AtomicLong 类来实现线程安全的计数器,避免使用锁带来的性能开销。
无锁算法:CAS 操作可以用于实现无锁算法,避免锁带来的性能开销和死锁问题。
非阻塞算法:CAS 操作可以用于实现非阻塞算法,如非阻塞队列、非阻塞栈等数据结构,提高并发性能。
3.缺点
1.ABA 问题
只是比较是否为预期值,并不能知道在这期间是否改动又改了回来。
解决方案:添加版本号
2.自旋时间过长
4.代码实现
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;
}
}