浅谈cas
1.cas是什么?
关于cas,其实是比较并且交换,它是一条CPU并发原语。Compare and Swap。
2.cas操作流程
CAS的思想很简单:三个参数,一个当前内存值V、旧的预期值A、即将更新的值B,当且仅当预期值A和内存值V相同时,将内存值修改为B并返回true,否则什么都不做,并返回false。
3.cas缺点?
会出现ABA问题。
ABA问题解释:cas 的ABA问题 想象成你的女朋友跟你分手了,又经历了别的男人,然后跟你又复合了。
对于某个线程A来说,一开始看到内存中某个变量值是0,然后中间被别的线程改动过最后又改成0,然后线程A看到的还是0,这时候虽然值一样,但是这个值的地址引用已经变了。ABA问题,如果不要求指引用,没什么影响,但是要求值引用会有影响。
ABA问题解决方案?
1.加版本号,相当于乐观锁
2.加布尔值
3.加时间戳
4.cas应用场景?
1. java原子操作类的实现机制.如AtomicInteger的updateAndGet方法
2.jdk1.8后concurrentHashMap使用cas与同步锁技术相结合,更新插入操作时,会用CAS判断.
3.在jvm中应用,jvm给对象分配内存时,会用cas操作判断该内存是否为空。
5.注意:
只能保证一个共享变量的原子操作。当对一个共享变量执行操作时,我们可以使用循环CAS的方式来保证原子操作,但是对多个共享变量操作时,循环CAS就无法保证操作的原子性 .
把多个变量放在一个对象里来进行CAS操作 , 从Java1.5开始JDK提供了AtomicReference类来保证引用对象之间的原子性
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)