1. CAS原理介绍
CAS是什么:是一种常见的降低读写锁冲突,保证数据一致性的乐观锁机制。
在上一篇文章中提到,volatile主要是解决共享变量可见性的一种机制,但是确无法解决读—改—写的原子操作。
而本文介绍的CAS是原子操作的一种。可用于在多线程编程中实现不被打断的数据交换操作,从而避免多线程同时改写某一数据时由于执行顺序不确定性以及中断的不可预知性产生的数据不一致问题。
该操作通过将内存中的值与指定数据进行比较,当数值一样时将内存中的数据替换为新的值。CAS算法CAS(V, E, N)包含3个参数,
V表示要更新的变量,
E表示预期的值,
N表示新值。
在且仅在V值等于E值时,才会将V值设为 N,如果V值和 E值不同,则说明已经有其他线程做了更新,当前线程什么都不做。最后,CAS返回当前V的真实值。Concurrent包下所有类底层都是依靠CAS操作来实现,JDK里面的Unsafe类提供了一系列的 compareAndSwap* 方法,而sun.misc.Unsafe为我们提供了一系列的CAS操作。
2. CAS会遇到的问题
-
ABA问题 -
自旋问题
本文介绍了CAS(Compare and Swap)在Java并发编程中的作用,作为乐观锁机制,它保证了数据一致性。CAS操作包含三个参数,当内存中的值与预期值相等时更新变量。然而,CAS存在自旋问题,可能导致CPU资源浪费。JDK的Unsafe类提供了compareAndSwap*方法来支持CAS操作。
170万+

被折叠的 条评论
为什么被折叠?



