📚 分类
多线程
🕵🏽‍♀️ 问题描述
CAS(比较并交换)你知道吗?
👨‍🏫 问题讲解
❒ CAS的全称是:Java中的CAS全称为"Compare-And-Swap"(比较并交换)。它体现的一种乐观锁的思想,在无锁情况下保证线程操作共享数据的原子性。CAS操作包含三个参数:预期值(Expected Value, V)、目标值(Target Value, A)和更新值(New Value, B)。其核心思想是:

✔ ‌预期值‌:线程期望变量当前的值
✔ ‌目标值‌:变量在内存中的实际值
‌✔ 更新值‌:线程希望将变量更新为的新值

❒ 在JUC(java.util.concurrent)包下实现的很多类都用到了CAS操作

✔ AbstractQueuedSynchronizer (AQS框架)
✔ AtomicXXX类

❒ 乐观锁和悲观锁

✔ CAS 是基于乐观锁的思想:最乐观的估计,不怕别的线程来修改共享变量,就算改了也没关系,我吃亏点再重试呗。

✔ synchronized是基于悲观锁的思想:最悲观的估计,得防着其它线程来修改共享变量,我上了锁你们都别想改,我改完了解开锁,你们才有机会。
🏳️‍🌈 问题总结
❒ CAS你知道吗?

✔ CAS的全称是: Compare And Swap(比较再交换);它体现的一种乐观锁的思想,在无锁状态下保证线程操作数据的原子性。

✔ CAS使用到的地方很多: AQS框架、AtomicXXX类。
✔ 在操作共享变量的时候使用的自旋锁,效率上更高一些。
✔ CAS的底层是调用的Unsafe类中的方法,都是操作系统提供的,其他语言实现乐观锁和悲观锁的区别。
✔ CAS是基于乐观锁的思想: 最乐观的估计,不怕别的线程来修改共享变量,就算改了也没关系,我吃亏点再重试呗。
✔ synchronized 是基于悲观锁的思想: 最悲观的估计,得防着其它线程来修改共享变量,我上了锁你们都别想改,我改完了解开锁,你们才有机会。
📖 问题信息
📈 浏览次数:15 | 📅 更新时间:2025-12-01 22:02:25
📦 创建信息
🏷️ ID:106 | 📅 创建时间:2024-12-20 09:09:20