目录
什么是 CAS ?
CAS(compare and swap / set),即所谓的比较并交换,它是一种乐观锁的落地实现。在 Java 中锁分为乐观锁和悲观锁。悲观锁是将共享资源独自占有,其它线程不能访问此共享资源,只有等占有资源的线程释放锁之后,下一个线程才可以访问。乐观锁的主要思想是通过某种方式不加锁来处理资源,例如给记录加版本号(version)来获取数据,性能较悲观锁有很大的提升。
CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存地址里面的值和预期原值(A)相同,那么就将内存里面的值更新成新值(B)。CAS是通过循环来获取数据的,如果在第一轮循环中,有一个线程获取地址里面的值被另一个线程修改了,那么此线程需要进行自旋重试,直到 CAS 成功。

本文介绍了Java中的CAS(Compare and Swap)操作,这是一种乐观锁的实现方式,用于在多线程环境下无锁地更新数据。文章还讨论了CAS可能导致的ABA问题,即值在比较和交换过程中发生了变更又变回原值。为解决ABA问题,文章提出了使用AtomicStampedReference和AtomicMarkableReference的方法,这两个类能记录数据的版本或标记,确保在更新时能检测到中间的变化。
最低0.47元/天 解锁文章
84万+

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



