原文网址:Java多线程--CAS的原理和优缺点_IT利刃出鞘的博客-CSDN博客
简介
说明
本文介绍Java中的CAS的原理,优点和缺点。
CAS,Compare And Swap,即比较并交换。
CAS性能很高,适合于高并发场景。
CAS是JUC的基础
Doug lea大神在同步组件中大量使用CAS实现了Java多线程的并发操作,CAS是整个JUC(java.util.concurrent)的基石。
以下组件都用到了CAS
- AQS同步组件
- Atomic原子类操作
- jdk8的ConcurrentHashMap使用CAS + Synchronized。
CAS原理
CAS是一种基于锁的操作,而且是乐观锁。
CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。若内存地址里面的值和A的值是一样的,就将内存里面的值更新成B。
CAS是通过无限循环来获取数据的,一旦检测到冲突产生,就重试当前操作直到没有冲突。
若在第一轮循环中,a线程获取地址里面的值被b线程修改了,那么a线程自旋,直到某一次循环时地址里的值没有被修改。
CAS优点
CAS是乐观锁,且一直自旋等待锁,所以性能很高。
CAS缺点
CAS缺点有三个:CPU开销大;ABA问题;只能保证一个共享变量原子操作。
上边是文章的部分内容,为便于维护,全文已迁移到此网址:Java-CAS的原理和优缺点 - 自学精灵