CAS算法的理解与应用

  • 什么是CAS
  • CAS的开销
  • CAS的应用

什么是CAS

CAS:Compare and Swap,即比较再交换。
主要就是三个值的比较:内存值旧预期值新预期值
简单来说,就是线程1和线程2同时从内存中拿到了一个变量a=1(内存值)
此时两个线程各有一份拷贝的a的值,均为1(旧预期值)。
线程1把a改成了2,进行比较,发现内存值1=旧的预期值1,说明这个时间段没人改过,直接把修改写入内存。
线程2想把a改成3,比较发现,内存值2 != 旧的预期值1,说明这个时间段有人改过了a的值,这次修改失败
这就是CAS算法。
某些场景又叫做乐观锁,比如数据库中的version字段
乐观锁其实就是无锁,也没有死锁的概念,通过数据对比来控制版本一致性
但是不适用于高并发场景

CAS的开销

cas是cpu指令集的操作,是原子性的,速度很快,开销几乎没有

CAS的应用

AtomicInteger.incrementAndGet()

static AtomicInteger a = new AtomicInteger(0);
a.incrementAndGet();
System.out.println("结果:"+ a); // a=1,当然这个在多线程下使用更好

AtomicInteger.incrementAndGet的实现用了乐观锁技术,调用了类sun.misc.Unsafe库里面的 CAS算法,用CPU指令和cpu自旋来实现无锁自增。所以,AtomicInteger.incrementAndGet的自增比用synchronized的锁效率倍增。

CAS算法的理解与应用相关推荐

  1. CAS算法的理解及应用

    应用 原子操作类,例如AtomicInteger,AtomicBoolean - 适用于并发量较小,多cpu情况下: Java中有许多线程安全类,比如线程安全的集合类.从Java5开始,在java.u ...

  2. 深入理解CAS算法原理

    转载自 深入理解CAS算法原理 1.什么是CAS? CAS:Compare and Swap,即比较再交换. jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法 ...

  3. CAS算法-实现原理

    目录 CAS是什么? CAS解决了什么问题? CAS存在什么问题? CAS有哪些应用场景? cas的实现 最后 CAS是什么? CAS的全称为Compare and swap 比较并交换.CAS又经常 ...

  4. 面试:CAS算法原理

    1.什么是CAS? CAS:Compare and Swap,即比较再交换. jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronou ...

  5. CAS算法与ABA问题

    锁是用来做并发最简单的方式,当然代价也是最高的. 独占锁是一种悲观锁,synchronized就是一种独占锁:它假设最坏的情况,并且只有在确保其它线程不会造成干扰的情况下执行,会导致其它所有需要锁的线 ...

  6. 24.多线程(等待唤醒机制,volatile,CAS 算法,线程池,定时器,设计模式)

    1.线程间的等待唤醒机制 Object 类中   void wait ()  在其他线程调用此对象的 notify () 方法或 notifyAll () 方法前,导致当前线程等待.         ...

  7. matlab温度数据怎么滤波_卡尔曼滤波算法思想理解 Kalman filter 第一篇

    卡尔曼滤波算法思想理解 Kalman filter 第一篇 最近在初步的理解目标跟踪的领域, 其中一个非常经典的算法卡尔曼滤波Kalman filter是需要有很好的理解才行, 由于已经脱离了学校,懂 ...

  8. Interview:算法岗位面试—11.15下午上海某航天***公司(国企)技术面之工业机器视觉认知、计算机视觉算法的理解、目标检测相关项目案例

    ML岗位面试:11.15下午上海某航天***公司(国企)技术面之工业机器视觉认知.计算机视觉算法的理解.目标检测相关项目案例 Interview:算法岗位面试-11.15下午上海某航天***公司(国企 ...

  9. (转)利用CAS算法实现通用线程安全状态机

    在多线程环境下,如果某个类是有状态的,那我们在使用前,需要保证所有该类的实例对象状态一致,否则会出现意向不到的bug.下面是通用线程安全状态机的实现方法. public class ThreadSav ...

  10. java cas原理_Java并发之原子变量及CAS算法-上篇

    Java并发之原子变量及CAS算法-上篇 编辑 ​ 概述 本文主要讲在Java并发编程的时候,如果保证变量的原子性,在JDK提供的类中是怎么保证变量原子性的呢?.对应Java中的包是:java.uti ...

最新文章

  1. 从人人网抓取高校数据信息,包括,省份 - 高校 - 院系 (提供最终SQL文件下载)...
  2. mysql大数据量分页的一些做法
  3. 杭电1874畅通工程续
  4. 研究生学制2.5年计算机,南大硕士研究生学制改为2.5年
  5. 现在有些公众号我真的看不惯
  6. 【月径流预测】基于matlab人工生态系统算法优化BP神经网络月径流预测【含Matlab源码 2000期】
  7. 3dmax2020软件安装教程
  8. 三年建模师告诉你3DMAX有没有前途
  9. SPSS——非参数检验——1-Sample K-S 单个样本(Kolmogorov-Smirnov)柯尔莫哥洛夫-斯米诺夫检验
  10. DotSoft.C3DTools.v7.0.0.3民用勘测地图和GIS工具集合
  11. 高速PCB设计系列基础知识67 | 尺寸与公差标注内容与通用知识
  12. 获取设备Mac地址和IP地址
  13. 基于RV1126 Video分析-----驱动各模块总览
  14. python去中心化_EOS区块链dApp去中心化应用汇总
  15. oracle lsnrctl命令,oracle lsnrctl
  16. 写二语习得学年论文感想
  17. 银川清华计算机技术培训,银川有没有本地IT技能培训?
  18. Ubuntu20安装erlang和rabbitmq
  19. VMware 虚拟网卡防火墙问题
  20. python彩票分析_128期老铁大乐透预测奖号:大中小码分析

热门文章

  1. eliminate什么意思_eliminate是什么意思_eliminate在线翻译_英语_读音_用法_例句_海词词典...
  2. Redhat8: SCTP: type= 5 errno= <0x5e> Socket type not supported
  3. Windows上查找文件(夹),查找内容等:EverthingNotePad++ 使用小技巧
  4. 5款非常好用的免费数据库建模工具(免费)
  5. MVVM框架的了解与使用
  6. 自动驾驶之轨迹规划5——Apollo规划中的离散点曲线平滑数学原理
  7. T SNE降维matlab程序,关于t-SNE降维方法
  8. 情迁机器人Tim_情迁机器人插件-情迁机器人app下载V1.5.0安卓版-西西软件下载
  9. VS2013安装SVN插件
  10. 【Get Up&Move】MMD镜头+动作打包下载.zip