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

CAS 浅析

什么是 CAS ?

Compare And Swap 的缩写,中文翻译成比较并交换,实现并发算法时常用到的一种技术。

它包含三个操作数-----内存位置、预期原值、更新值

执行 CAS 操作的时候,将内存位置的值与预期原值做比较,如果相同则处理器会自动将该位置值更新为新值,如果不匹配,处理器不做任何操作,多个线程同时执行 CAS 操作只有一个会成功
在这里插入图片描述

CAS 为什么能又不加锁又能保证数据一致和安全呢?

答案是硬件级别的保证 由 JVM 底层 C++ 实现的 UnSafe 类来实现
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

CAS 和自旋

在这里插入图片描述

自旋锁的 demo
public class BaseTest {AtomicReference<Thread> atomicReference = new AtomicReference<>();public void lock(){Thread thread = Thread.currentThread();System.out.println(Thread.currentThread().getName() + "/t" + "------ come in");while (!atomicReference.compareAndSet(null,thread)){}}public void unlock(){Thread thread = Thread.currentThread();atomicReference.compareAndSet(thread,null);System.out.println(Thread.currentThread().getName() + "/t" + "解锁成功");}public static void main(String[] args) {BaseTest baseTest = new BaseTest();new Thread(()->{baseTest.lock();try{TimeUnit.SECONDS.sleep(5);}catch(Exception e){e.printStackTrace();}baseTest.unlock();},"A").start();try{TimeUnit.MILLISECONDS.sleep(500);}catch(Exception e){e.printStackTrace();}new Thread(()->{baseTest.lock();baseTest.unlock();},"B").start();}}

CAS 的两大缺点:

循环时间长开销大

在这里插入图片描述

ABA 问题

在这里插入图片描述

想要解决 ABA 问题可以引入版本号机制或戳记流水,可以直接使用 Java 中的 AtomicStampedReference 实现
http://www.dtcms.com/a/354052.html

相关文章:

  • 视觉语言模型应用开发——Qwen 2.5 视觉语言模型的零样本学习能力在多模态内容审核中的实践研究
  • 把CentOS 7默认yum源改成腾讯云镜像
  • 阿里云——云存储与数据库服务
  • RustFS架构解密:零GC设计如何实现12μs级存储延迟?
  • 【lucene】SpanNearQuery中的slop
  • 【lucene】SpanFirstQuery的end参数
  • 【Python】包管理,弄明白import,package,module
  • 复杂网络环境实测:主流云VR产品性能对比——平行云LarkXR突破网络限制 引领云VR技术新高度
  • 记住密码管理器
  • 在Eclipse中配置Tomcat
  • 终端美化:Windows11 下 安装 WSL 并使用好看的的 zsh 主题
  • 【图论】最短路算法
  • 802.11ax上行OFDMA接入机制:技术原理与实现细节
  • 流水线用到的Dockerfile和构建脚本build.sh
  • Python电影票房预测模型研究——贝叶斯岭回归Ridge、决策树、Adaboost、KNN分析猫眼豆瓣数据
  • MYSQL---存储过程
  • 【轨物方案】“无人值守”光伏电站智能运维解决方案,赋能绿色能源高效运营
  • 正则表达式 —— 贪婪与非贪婪
  • 汽车盲点检测系统的网络安全分析和设计
  • 【Linux学习】正则表达式学习记录
  • 【鸿蒙开发001】上下翻页-翻书效果实现【可复用】
  • 写一个天气查询Mcp Server
  • 2025年9月计算机二级C++语言程序设计——选择题打卡Day8
  • urdf文件可以使用的一些工具(urdf检查和可视化)
  • 【leetcode】100.相同的树
  • Elasticsearch核心配置详解与优化
  • SAP 怎么知道物料的自动过账流程
  • DFT、CHORD
  • “上门经济”的胜利:深度解析家政O2O如何用“用户体验”重塑传统行业
  • 【双指针- LeetCode】15.三数之和