CAS 是 compare and swap 的缩写,即我们所说的比较交换。
CAS 是一种基于锁的操作,而且是乐观锁。在 Java 中锁分为乐观锁和悲观锁。悲观锁是将资源锁住,等一个之前获得锁的线程释放锁之后,下一个线程才可以访问。而乐观锁采取了一种宽泛的态度,通过某种方式不加锁来处理资源,比如通过给记录加 version 来获取数据,性能较悲观锁有很大的提高。
CAS 操作包含三个操作数——内存位置(V)、预期原值(A)和新值(B)。如果内存地址里面的值和A的值是一样的,那么就将内存里面的值更新成 B。CAS 是通过无限循环来获取数据的,如果在第一轮循环中,a 线程获取地址里面的值被b 线程修改了,那么 a 线程需要自旋,到下次循环才可能有机会执行。
java.util.concurrent.atomic 包下的类大多是使用 CAS 操作来实现的
(AtomicInteger, AtomicBoolean, AtomicLong)

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.