当前位置: 首页 > news >正文

CAS原理

CAS是compare and swap的缩写,即我们所说的比较交换。cas是一种基于锁的操作,而且是乐观锁。在java中锁分为乐观锁和悲观锁。悲观锁是将资源锁住,等一个之前获得锁的线程释放锁之后,下一个线程才可以访问。而乐观锁采取了一种宽泛的态度,通过某种方式不加锁来处理资源,比如通过给记录加version来获取数据,性能较悲观锁有很大的提高。

CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存地址里面的值和A的值是一样的,那么就将内存里面的值更新成B。CAS是通过无限循环来获取数据的,如果在第一轮循环中,a线程获取地址里面的值被b线程修改了,那么a线程需要自旋,到下次循环才有可能机会执行。

CAS 是 compare and swap 的简写,即比较并交换。它是指一种操作机制,而不是某个具体的类或方法。在 Java 平台上对这种操作进行了包装。在 Unsafe 类中,调用代码如下:

unsafe.compareAndSwapInt(this, valueOffset, expect, update);

它需要三个参数,分别是内存位置 V,旧的预期值 A 和新的值 B。

1、先从内存位置读取到值,然后和预期值A比较。
2、如果相等,则将此内存位置的值改为新值 B,返回 true。
3、如果不相等,说明和其他线程冲突了,则不做任何改变,返回 false。

这种机制在不阻塞其他线程的情况下避免了并发冲突,比独占锁的性能高很多。 CAS 在 Java 的原子类和并发包中有大量使用。

http://www.jsqmd.com/news/446890/

相关文章:

  • 微信小程序TS+SASS使用vant导致体验版白屏SystemError (jsEnginScriptError) X(...).bem is not a function
  • 【节点】[Fog节点]原理解析与实际应用
  • 酷炫 css 按钮 边框霓虹
  • 软件设计师考试中需要掌握的一些常用算法,基于C++实现
  • Mybatis的延迟加载
  • 教程 | 如何动用智慧安装NavicatPremium 16
  • Python 潮流周刊#141:Python 早期贡献者口述历史
  • Web前端之旋转木马的图片效果、鼠标进入停止动画、keyframes、hover、child、nth
  • canvas_3_绘制弧形
  • linux-centos常用指令、tar.gz解压、mv重命名、cp复制、ss -ltnp、curl测试任意端口网络是否可达等
  • 女生必看!用OpenClaw龙虾当你的24小时免费助理,职场、生活效率翻倍,做自己的女王!
  • 2026年宜昌两天一夜游路线权威榜单:十大精品路线深度评测与排位赛 - 品牌推荐
  • 软考知识总结
  • python pip 更新
  • MySQL为什么有了redolog还需要double write buffer?
  • 实习面经摘录回答(四)
  • CPU中央处理器(下)
  • 2026年留学生求职必看:中国留学生求职机构选型指南与适配场景全解析 - 品牌推荐
  • vue+elementui完美模拟pc版快手实现短视频,含短视频详情播放
  • TeXLive2023 pdflatex编译eps图像,出现错误的问题
  • 2026年用户口碑最佳的中国留学生求职机构推荐:五家真实服务体验与成果对比 - 品牌推荐
  • android scrollview嵌套webview,滚动冲突解决
  • 2026年中国留学生求职机构深度测评:基于海内外资源覆盖的五维战力解析 - 品牌推荐
  • 第二:Jmeter - 环境搭建
  • 2026年北京审计事务所深度测评:基于上市公司服务与跨境业务能力的五维对比 - 品牌推荐
  • 2026年游客口碑最好的宜昌两天一夜游路线推荐:五大真实体验与避坑对比 - 品牌推荐
  • xLua实现背包的热更新实践
  • Web前端之微信小程实现上下左右全向滑动切换、复杂解构、bindtouchstart、bindtouchend、parseInt
  • 第一:Jmeter-JDK安装和环境变量配置
  • 2026年隐私安全充电宝品牌深度测评:五维安全技术全解析与实战对比 - 品牌推荐