Administrator
发布于 2024-11-03 / 5 阅读
0

CAS

1.什么CAS

CAS 是 Compare and Swap(比较并交换)的缩写,是一种用于实现多线程同步的原子操作。CAS 操作包括三个步骤:比较内存中的值和预期值,如果相等则将新值写入内存,否则不做任何操作。CAS 操作是一种乐观锁的实现方式,它可以避免使用传统的锁机制(如 synchronized)带来的性能开销和死锁问题。

2.应用场景

  1. 乐观锁:CAS 操作可以用于实现乐观锁机制,通过比较并交换来实现数据的并发控制。

  2. 原子操作:CAS 操作可以用于实现原子操作,如原子更新操作、原子加减操作等,保证操作的原子性。

  3. 自旋锁:CAS 操作可以用于实现自旋锁,避免线程进入阻塞状态,提高并发性能。

  4. 线程安全的计数器:使用 AtomicInteger 或 AtomicLong 类来实现线程安全的计数器,避免使用锁带来的性能开销。

  5. 无锁算法:CAS 操作可以用于实现无锁算法,避免锁带来的性能开销和死锁问题。

  6. 非阻塞算法: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;
    }
}