currenthashmap底层的CAS原理

  • 介绍CAS
    • CAS的全称是Compare And Swap 即比较交换,其算法核心思想如下
    • 如果V值等于E值,则将V的值设为N。若V值和E值不同,则说明已经有其他线程做了更新,则当前线程什么都不做。
      • 由于CAS操作属于乐观派,它总认为自己可以成功完成操作,当多个线程同时使用CAS操作一个变量时,只有一个会胜出,并成功更新,其余均会失败,但失败的线程并不会被挂起,仅是被告知失败,并且允许再次尝试,当然也允许失败的线程放弃操作,这点从图中也可以看出来。基于这样的原理,CAS操作即使没有锁,同样知道其他线程对共享资源操作影响,并执行相应的处理措施。同时从这点也可以看出,由于无锁操作中没有锁的存在,因此不可能出现死锁的情况,也就是说无锁操作天生免疫死锁。

介绍CAS

CAS的全称是Compare And Swap 即比较交换,其算法核心思想如下

执行函数:CAS(V,E,N) 其包含3个参数
V表示要更新的变量
E表示预期值
N表示新值

如果V值等于E值,则将V的值设为N。若V值和E值不同,则说明已经有其他线程做了更新,则当前线程什么都不做。

通俗的理解就是CAS操作需要我们提供一个期望值,当期望值与当前线程的变量值相同时,说明还没线程修改该值,当前线程可以进行修改,也就是执行CAS操作,但如果期望值与当前线程不符,则说明该值已被其他线程修改,此时不执行更新操作,但可以选择重新读取该变量再尝试再次修改该变量,也可以放弃操作。

由于CAS操作属于乐观派,它总认为自己可以成功完成操作,当多个线程同时使用CAS操作一个变量时,只有一个会胜出,并成功更新,其余均会失败,但失败的线程并不会被挂起,仅是被告知失败,并且允许再次尝试,当然也允许失败的线程放弃操作,这点从图中也可以看出来。基于这样的原理,CAS操作即使没有锁,同样知道其他线程对共享资源操作影响,并执行相应的处理措施。同时从这点也可以看出,由于无锁操作中没有锁的存在,因此不可能出现死锁的情况,也就是说无锁操作天生免疫死锁。

currenthashmap底层的CAS原理相关推荐

  1. cas无法使用_【漫画】CAS原理分析!无锁原子类也能解决并发问题!

    本文来源于微信公众号[胖滚猪学编程].转载请注明出处 在漫画并发编程系统博文中,我们讲了N篇关于锁的知识,确实,锁是解决并发问题的万能钥匙,可是并发问题只有锁能解决吗?今天要出场一个大BOSS:CAS ...

  2. 面试被问到CAS原理,触及知识盲区,脸都绿了!

    文章目录 前提知识掌握 什么是CAS? CAS原理 CAS带来的问题 CAS原理总结,面试问到了到底该怎么说? 尾言 前提知识掌握 想要了解 CAS 底层原理,那么我们先来了解一下 java.uit. ...

  3. Java并发基石CAS原理以及ABA问题

    在学习CAS之前,先从一个简单的案例入手,进而引出CAS的基本使用: 1.基于CAS的网站计数器 需求: 我们开发一个网站,需要对访问量进行统计,用户每发送一次请求,访问量+1,如何实现? 我们模拟有 ...

  4. CAS原理——乐观锁机制

    CAS原理--乐观锁机制 一:CAS原理 二:ABA问题 一:CAS原理 乐观锁的本质即是CAS,操作系统提供了支持CAS修改内存值的原子指令,所以乐观锁得以实现. CAS(CompareAndSwa ...

  5. JAVA CAS原理深度分析

    CAS CAS:Compare and Swap, 翻译成比较并交换. java.util.concurrent包中借助CAS实现了区别于synchronouse同步锁的一种乐观锁. 本文先从CAS的 ...

  6. CAS原理之笨鸟先飞

    cas原理详解 一.直入正题(通过一道面试题刨析) 现在有这么一个需求,需要实现一个支持并发的计数功能,例如下面的代码 public class Increment{ private int coun ...

  7. TS各个表 与 SECTION 的解析 CAS原理

    TS流,通过一个个的TS包来传送: TS包可以是传送PSI SI等各表的数据包,也可以是传送节目音视频数据(携带的PES包:音视频基本流包)的包:TS携带 PSI SI等表的数据时,各个表以各表对应的 ...

  8. 真实业务场景展现CAS原理的ABA问题及解决方案

    文章目录 阅读提示 CAS原理.ABA问题介绍 真实业务场景 如何解决ABA问题 CAS学习总结 阅读提示 本文将借助开保险柜的业务场景重点阐述误用AtomicBoolean引起的ABA问题,以及解决 ...

  9. go底层系列-defer原理剖析

    go底层系列-defer原理剖析 目录 go底层系列-defer原理剖析 defer 前言 热身 defer规则 规则一:延迟函数的**参数在defer语句出现时就已经确定下来**了 规则二:延迟函数 ...

最新文章

  1. PL/SQL developer连接oracle出现“ORA-12154:TNS:could not resolve the connect identifier specified”问题的解决
  2. poj 1987 树的分治
  3. 利用chunk重设大小攻击堆
  4. MVC4建立DBContext的EF6数据
  5. ipoo3可以用鸿蒙,iqooneo3支持无线充电吗_iqooneo3可以无线充电吗
  6. 根文件系统定制【ZT】
  7. [codevs1378]选课
  8. 根据录入的计算公式计算_超全的铝材重量计算公式
  9. 制作RPG游戏的部分核心代码分析
  10. Java导出Excel每列求和,POI导出excel执行自动求和
  11. ps制作视:_制作自己的PS4游戏:“梦想”入门
  12. php guzzle并发,使用Guzzle并发请求接口
  13. 社会生活——《哥哥又逃票了》
  14. 一川烟草,满城飞絮,梅子黄时雨
  15. python3数据可视化软件_Python数据可视化工具Plotly
  16. j计算机屏幕关闭时间,win7如何设置自动关闭电脑屏幕的时间?
  17. linux 配置使用ftp 使用账号密码登陆失败
  18. 怎样找自己研究领域的论文
  19. iOS逆向环境以及常用命令行(逆向一)
  20. 迅雷:要想下载速度快 请避免使用国外的公共DNS服务

热门文章

  1. IOS RSA加密解密
  2. Steam客户端更新:Linux增加2倍缩放模式,支持Windows 10的HiDPI
  3. ospf综合实验配置
  4. echarts画各种形状水波图
  5. python中可选参数_正确使用Python可选参数
  6. Js获取年月日及时间转换
  7. js获取年月日星期日期
  8. 年产3000吨原味奶糖生产车间工艺设计
  9. Hbuilder真机调试
  10. 实用的行列式计算方法 —— 线性代数(det)