java中的原子性和实现

原子性:不可中断的一系列指令

处理器如何实现原子性

处理器基于对总线加锁和缓存加锁的方式来实现多处理器之间的原子操作。

总线加锁:只有一个处理器能处理这个内存,其他处理器的所有请求都被阻塞,该处理器独占共享内存。
缓存锁定:通过缓存一致性协议,保证同一时刻只有一个处理器能操作某一块内存

java中原子性的实现

在java中是通过锁和循环CAS来实现原子操作的

使用CAS实现原子性

JVM的CAS是利用了CMPXCHG指令实现的。

自旋CAS就是CAS操作直到成功。

原子类:AtomicBoolean,AtomicLong,AtomicInteger,AtomicBoolean。

这些类提供了CAS和原子加1的方法。

CAS相比锁的优势:不用上下文切换

CAS三大问题

(1)ABA问题,JDK的Atomic包的类的compareAndSet方法会检查版本号,从而避免ABA。

(2)循环时间长,需要加最大重试次数,然后抛出异常处理。

(3)只能保证一个变量的原子操作。java推出了AtomicReference 类:

复制代码
do {
    oldPair = pairRef.get();
    newPair = new Pair(newFirst, newSecond);
} while (!pairRef.compareAndSet(oldPair, newPair));

使用锁来实现原子操做

无论是偏向锁,轻量级锁,互斥锁,都用了循环CAS,当一个线程想进入同步块中时使用CAS来获取锁,当它退出时使用循环CAS释放锁。

相关推荐
suconnect29 分钟前
Spring Boot接入企业RAG:文档切分、向量检索、权限过滤和答案溯源
java·spring boot·后端
weixin_BYSJ198731 分钟前
springboot校园自习室管理小程序---附源码32142
java·javascript·spring boot·python·django·flask·php
ClickHouseDB1 小时前
ClickHouse托管Postgres:OLTP+OLAP,新能力解锁最佳数据平台
java·前端·数据库
霸道流氓气质1 小时前
Java中集成Smile 技术教程:从入门到工程实践
java·开发语言
wuqingshun3141591 小时前
MyBatis 中#()和$()的区别是什么?
java
小Ti客栈1 小时前
SpringBoot 事件发布机制:原理与应用
java·spring boot·spring
BerrySen1782 小时前
迈向 Next-Gen Java:企业级高并发架构演进与大模型 Agent 落地深度实战
java·开发语言·架构
technology_x2 小时前
2026年财务报表分析软件测评:兼容与安全解析
java·服务器·前端
兰令水2 小时前
hot100【acm版】【2026.7.25/26打卡-java版本】
java·算法·排序算法
Nebula_g2 小时前
Java实现本地Socket通信(三)
java·开发语言·学习·socket·可视化