CAS

CAS : Compare And Swap (比较与交换)

CAS 操作包含三个操作数:内存位置(V)、预期原值(A)和新值(B)
当且仅当预期原值(A)与内存位置(V)的值相同时,才会将内存位置(V)的值更新为新值(B),否则不会更新值,不断循序重试;

class AtomicInteger {
    private int value;

    public int incrementAndGet() {
        int oldValue;
        int newValue;
        do {
            oldValue = value;
            newValue = oldValue + 1;
        } while (!compareAndSwap(oldValue, newValue));
        return newValue;
    }

    private boolean compareAndSwap(int expectedValue, int newValue) {
        // 这里是底层的 CAS 操作,如果当前值与预期值相同,就将其更新为新值
        if (value == expectedValue) {
            value = newValue;
            return true;
        }
        return false;
    }
}

应用场景

CAS: 适用于 读多写少, 比如:成绩更正、核酸录入
synchronized: 使用并发量不大且接受一定延迟场景, 比如:订单退费

性能分析

CAS: 无锁技术,性能高于synchronized同步锁
synchronized同步锁: 线程阻塞到唤醒会频繁 发生 线程上下文切换, 耗费性能

posted @ 2024-07-23 11:04  亲爱的阿道君  阅读(9)  评论(0编辑  收藏  举报