96 【面试官问:什么是CAS? - 小超学编程 | 小红书 - 你的生活指南】 😆 picrREYXLGMQhjZ 😆 http://xhslink.com/yFE5vS

Untitled

CAS 是 compare and swap 的缩写,即我们所说的比较交换。

cas 是一种基于锁的操作,而且是乐观锁。在 java 中锁分为乐观锁和悲观锁。悲观锁是将资源锁住,等之前获得锁的线程释放锁之后,下一个线程才可以访问。

而乐观锁采取了一种宽泛的态度,通过某种方式不加锁来处理资源,比如通过给记录加 version 来获取数据,性能较悲观锁有很大的提高。

Untitled

Untitled

CAS 操作包含三个操作数 ——— 内存位置(V)、预期原值(A)和 新值(B)。如果内存地址里面的值和 A 的值是一样的那么就将内存里面的值更新成 B。CAS 是通过无限循环来获取数据的,若在第一轮循环中,a 线程获取地址里面的值被 b 线程修改了,那么 a 线程需要自旋,到下次循环才有可能机会执行。

java.util.concurrent.atomic 包下的类大多是使用 CAS 操作来实现的

(AtomicInteger, AtomicBoolean,AtomicLong)。