【并发编程篇12】CAS

55 阅读1分钟

CAS(Compare And Swap)比较再交换

它体现的是一种乐观锁的思想,在无锁情况下保证线程操作共享数据的原子性

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

  • AbstractQueuedSynchronizer(AQS)框架
  • AtomicXXX类

image.png

image.png

image.png

乐观锁和悲观锁

  • CAS 是基于乐观锁的思想:最乐观的估计,不怕别的线程来修改共享变量,就算改了也没关系,我吃点亏再重试呗。
  • Synchronized 是基于悲观锁的思想:最悲观的估计,得防着其他线程来修改共享变量,我上了锁你们都别想改,我改完了解开锁,你们才有机会。