0

0

Java中说一下 atomic 的原理?

月夜之吻

月夜之吻

发布时间:2025-10-11 08:25:01

|

740人浏览过

|

来源于php中文网

原创

atomic类通过cas操作和volatile关键字实现线程安全,利用unsafe类提供底层支持,结合cas的原子性与volatile的可见性,避免锁机制开销,适合低竞争场景,但存在aba问题,可通过atomicstampedreference解决。

java中说一下 atomic 的原理?

Atomic 类的原理主要依赖于 CAS(Compare-And-Swap) 操作和 volatile 关键字来实现线程安全的原子操作,而无需使用传统的锁机制。

CAS 操作

CAS 是原子类的核心,它是一种无锁的原子操作,由 CPU 提供硬件支持。CAS 包含三个操作数:

  • 内存位置(V):要修改的变量在内存中的地址
  • 旧的预期值(A):当前线程认为该变量应该具有的值
  • 新值(B):要写入的新值

CAS 会判断该内存位置的值是否等于预期值 A,如果相等,则将内存值更新为 B,并返回 true;否则不更新,返回 false。这个过程是原子的,不会被中断。

例如,在 AtomicInteger 中调用 incrementAndGet() 方法时,底层会不断尝试 CAS 操作,直到成功为止(自旋)。

立即学习Java免费学习笔记(深入)”;

volatile 的作用

Atomic 类中的变量通常使用 volatile 修饰,比如 AtomicInteger 内部的 value 是 volatile 的。这保证了两点:

佳可商务购物程序 2004
佳可商务购物程序 2004

在原版的基础上做了一下修正评论没有提交正文的问题特价商品的调用连接问题去掉了一个后门补了SQL注入补了一个过滤漏洞浮动价不能删除的问题不能够搜索问题收藏时放入购物车时出错点放入购物车弹出2个窗口修正主题添加问题商家注册页导航连接问题销售排行不能显示更多问题热点商品不能显示更多问题增加了服务器探测 增加了空间使用查看 增加了在线文件编辑增加了后台管理里两处全选功能更新说明:后台的部分功能已经改过前台

下载
  • 变量的修改对所有线程立即可见(内存可见性)
  • 禁止指令重排序,确保操作顺序一致

结合 CAS,volatile 确保了一个线程修改值后,其他线程能立刻看到最新值,并在下一次 CAS 中基于最新值进行比较。

Unsafe 类与底层实现

Java 的 Atomic 类底层依赖于 sun.misc.Unsafe 类,它提供了直接操作内存、执行 CAS 等底层能力。比如:

compareAndSwapInt()、compareAndSwapLong() 等方法就是 Unsafe 提供的 CAS 操作。

虽然 Unsafe 不建议开发者直接使用,但 Atomic 包封装了这些危险操作,提供了安全易用的接口。

ABA 问题与解决

在 CAS 中存在 ABA 问题:一个值原来是 A,被改成 B,又改回 A。CAS 会误以为它从未被修改过。

为解决这个问题,Java 提供了 AtomicStampedReferenceAtomicMarkableReference,通过引入版本号或标记位来区分是否真正发生变化。

基本上就这些。Atomic 的高效在于避免了 synchronized 带来的线程阻塞和上下文切换,适合简单共享变量的并发场景。不过在高竞争环境下,CAS 可能导致自旋次数过多,反而影响性能。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c++中volatile关键字的作用
c++中volatile关键字的作用

本专题整合了c++中volatile关键字的相关内容,阅读专题下面的文章了解更多详细内容。

75

2025.10.23

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1772

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

569

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2338

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

43

2026.01.19

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

723

2023.08.10

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

2

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

5

2026.03.03

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

66

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.1万人学习

C# 教程
C# 教程

共94课时 | 10.6万人学习

Java 教程
Java 教程

共578课时 | 76.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号