什么是 Java 中的原子性、可见性和有序性?

Java 中的原子性、可见性、有序性是多线程编程中最核心的三个特性,也称为“并发三要素”或“happens-before 关系的三大保证”。

它们直接决定了代码在多线程环境下是否能得到“预期”的执行结果。下面用最直白的方式解释三者的含义、为什么会丢失、以及 Java 是如何(或没能)保证它们的。

1. 原子性(Atomicity)

定义
一个操作(或一组操作)要么全部执行成功,要么全部不执行,不会出现“执行到一半”的中间状态。

最经典的非原子例子(很多人踩过的坑):

intcount=0;// 线程 A 线程 Bcount++;count++;

上面看似一行代码,实际 JVM 会分解为:

  1. 读取 count 的值
  2. +1
  3. 把新值写回 count

所以真正的执行序列可能是:

线程A 读 0 线程B 读 0 线程A +1 → 1 线程A 写回 1 线程B +1 → 1 线程B 写回 1

最终 count = 1,而不是预期的 2 →丢失更新(非原子)

Java 中真正具有原子性的操作(部分):

操作类型是否原子说明
基本类型(除 long/double 外)的读写32位以内基本类型读写是原子的
long / double 的读写不是(JDK8 前)64位拆成两个 32 位,可能看到“半写”
volatile long / double是(JDK5+)volatile 保证 long/double 读写原子
使用 AtomicXXX 类AtomicInteger、AtomicLong 等
synchronized / Lock可以做到保护的代码块整体原子

小结
普通 int 的count++不是原子操作
想保证原子性 → 用AtomicIntegersynchronizedReentrantLockLongAdder


2. 可见性(Visibility)

定义
当一个线程修改了共享变量的值,其他线程立刻能看到最新的值。

经典反例(最常出现的可见性问题):

booleanrunning=true;voidstop(){running=false;// 线程A执行}voidrun(){while(running){// 线程B一直循环// do something}}

很多时候线程B永远停不下来,因为它读到的running一直是自己工作内存里的旧值(true),没有从主内存刷新最新值(false)。

原因
Java 内存模型(JMM)允许线程把变量先写到本地工作内存(CPU 缓存),而不是立刻写回主内存。
其他线程可能长时间从自己的缓存读旧值。

Java 提供可见性保证的方式

方式是否提供可见性额外效果典型使用场景
volatile禁止指令重排序状态标志、单次发布
synchronized进入/退出同步块刷新保护共享变量的复合操作
Lock(ReentrantLock)同 synchronized需要可中断、超时、公平锁场景
final是(初始化后)禁止重排序不可变对象、安全发布
AtomicXXXCAS + volatile 语义原子操作 + 可见性

记住一句话
只要变量被 volatile 修饰、或者在 synchronized 块内读写、或者通过 Atomic 类操作,就有了可见性保证。


3. 有序性(Ordering)

定义
代码的执行顺序不一定等于程序代码的书写顺序(只要不影响单线程结果,编译器/JVM/CPU 都可以重排序)。

经典反例(双重检查锁单例的陷阱):

classSingleton{privatestaticSingletoninstance;// 非 volatilepublicstaticSingletongetInstance(){if(instance==null){// 第一次检查synchronized(Singleton.class){if(instance==null){// 第二次检查instance=newSingleton();// 问题在这里!}}}returninstance;}}

new Singleton()不是一个原子操作,它有三个步骤:

  1. 分配内存
  2. 初始化对象(调用构造方法)
  3. 把引用指向这块内存(instance 指向新对象)

指令重排序后可能出现

线程 A:1→3→2(先把引用指向内存,再初始化)
线程 B:看到 instance != null,直接返回 → 拿到半初始化对象 → 使用时崩溃或逻辑错误

解决方案(三种主流写法):

// 写法1:volatile(最常用、最清晰)privatestaticvolatileSingletoninstance;// 写法2:静态内部类(推荐,无 volatile 也安全)privatestaticclassHolder{privatestaticfinalSingletonINSTANCE=newSingleton();}publicstaticSingletongetInstance(){returnHolder.INSTANCE;}// 写法3:枚举(最安全、最简洁)publicenumSingleton{INSTANCE;// 其他方法...}

Java 提供有序性保证的方式

方式禁止的重排序类型典型使用场景
volatile写→读、写→写DCL 单例、状态标志
synchronized进入/退出同步块前后任何需要同步的代码块
finalfinal 字段初始化 → 后续读不可变对象、安全发布
Happens-before 规则多种情况(详见 JMM 8 条规则)理解并发语义的核心

快速记忆对比表(面试/实战最常用)

特性关注点丢失的表现常见解决方案典型工具/关键字
原子性操作不可分割读-改-写中间被打断synchronized / Lock / AtomicXXXAtomicInteger、LongAdder
可见性写后其他线程能看到一个线程改了值,另一个线程看不到volatile / synchronized / final / Lockvolatile
有序性代码不按书写顺序执行new 对象引用先发布,构造未完成volatile / final / synchronizedvolatile + DCL、静态内部类

一句话总结(最常考的表述):

Java 并发编程的三大核心问题:

  • 原子性:操作要“要么全做,要么不做”
  • 可见性:修改要“让别人看得到”
  • 有序性:不要“看起来合理的重排序”把程序搞乱

如果你想继续深入某个点(比如 happens-before 规则完整列表、volatile 底层内存屏障、JMM 模型图解、LongAdder 原理等),可以直接告诉我,我再给你展开更详细的例子和代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1210609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2000亿美元!2026年全球游戏行业的新格局与新变量

2000亿美元!2026年全球游戏行业的新格局与新变量 2026年,全球游戏市场规模预计突破2000亿美元(约2050-2100亿美元),从2025年的1888-1970亿美元增长3-7%。 这标志着后疫情低迷期的复苏(增长率从2022-2024的…

使用 wxPython 构建文件编辑器与预览器:从零到一的完整实现

一、背景 在日常开发工作中,我们经常需要快速编辑和预览文本文件,特别是 HTML 和 Markdown 文档。虽然市面上有许多成熟的编辑器,但有时我们需要一个轻量级、定制化的解决方案来满足特定需求。 C:\pythoncode\new\wx_file_editor.py 传统的…

从零构建轻量级企业考勤订饭系统:Node.js + SQLite 全栈实战复盘

在中小企业的日常管理中,考勤和午餐统计往往是一件琐碎但必须处理好的小事。市面上的SaaS软件要么功能过于臃肿,要么价格昂贵;而纯手工的Excel记录又容易出错且难以协同。 C:\myApp\attendance-enterprise 本文将详细复盘如何使用 Node.js S…

python如何发送邮件

以下是一个使用Python发送邮件的示例代码,包含基础配置和附件功能: import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders import …

【课程设计/毕业设计】基于Springboot的在线游戏商城系统基于springboot的游戏售卖商城系统【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Python如何识别周围WiFi:跨平台实现与进阶技巧

在物联网设备管理、网络安全审计或智能家居场景中,识别周围WiFi网络是基础需求。Python凭借其丰富的生态库,能够跨平台实现WiFi扫描、信号强度检测及网络分析。本文将系统梳理主流方法,结合代码示例与性能对比,帮助开发者快速构建…

一键生成100条小红书笔记!DeepSeek+火兔工具箱的组合太牛了!

做小红书博主的痛谁懂啊?熬3小时写1篇笔记,流量寥寥无几;想日更却被选题、排版、违禁词轮番卡壳,账号常年停留在几百粉;更头疼的是批量运营时,多平台切换能耗光半天精力。其实不是你不够努力,只…

【毕业设计】基于springboot的助农扶贫系统(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026年上海企业管理咨询公司权威推荐:卓越绩效模式/ 绩效模式 /绩效分析模式/ 团队绩效模式/高绩效心理建设源头服务商精选

在充满活力的上海,企业管理咨询行业正随着经济转型而快速发展。据统计,上海目前拥有各类管理咨询服务机构超过5000家,服务范围覆盖战略规划、数字化转型、人力资源优化、精益生产及绩效提升等关键领域。面对如此众多…

雅思网上辅导终极榜单推荐|2026 雅思网上辅导实测 全国适配机构汇总

本次测评由雅思官方教研合作单位联合第三方教育质量监测中心发起,依据《雅思辅导服务能力评估准则(2026版)》,覆盖80个城市260个区县,结合38000+考生及家长实测反馈、240家雅思教育机构全维度核验,形成这份兼具权…

Router_T000_ConceptMECE

startmindmap* 汇报总图** 动机价值*** 故事钩子*** 价值主张** 现状基线*** 基线速览*** SafeDreamer*** UNISafe外盾*** SPOWL** 问题缺陷*** 主流缺陷*** OOD幻觉*** 外盾不学*** 固定阈值** 创新方案*** 核心创新*** Risk-Bellman*** ucert内生*** 不改环境奖*** 插入点** …

离散化详解

离散化 两种 第二种不理解,实际没什么用 第一种: 离散化是由于数据个数少而数据最大值很大时要将数据直接作为数组下标时空间过大时而为了减小空间占用又不破坏数据关系的一种方法 离散化本质上可以看成是一种 哈希 …

山东一卡通(礼遇卡)哪里回收方便,1分钟变现技巧

在逢年过节时收到的福利卡或者礼品卡中,山东一卡通(礼遇卡)并不少见。不少人手中的山东一卡通因用不上长期闲置,既担心过期浪费,又不知该如何妥善处置。找到便捷的回收方式,让闲置山东一卡通快速处理,成为很多人…

Java毕设选题推荐:基于springboot的游戏售卖商城系统基于SpringBoot+Vue的游戏装备交易商城系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

计算机Java毕设实战-基于springboot的游戏售卖商城系统游戏攻略资讯补丁售卖系统 游戏道具商城【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Java计算机毕设之基于springboot+vue的游戏装备账号销售商城平台系统基于springboot的游戏售卖商城系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Java毕设项目:基于springboot的助农扶贫系统(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026英语雅思口语培训辅导机构排行榜 家长择校实用指南:多维度评测帮孩子选对适配口语辅导机构

对于计划让孩子备考雅思、规划留学的家长而言,选择一家合适的英语雅思口语培训辅导机构,是助力孩子突破口语瓶颈、高效备考的关键一步,也是最让人头疼的难题。很多家长翻遍各类机构介绍,却分不清哪家的口语辅导模式…

2026英语雅思培训学校机构辅导机构推荐榜单 家长择校指南:多维度评测帮孩子选对适配机构

对于计划让孩子备考雅思、规划留学的家长而言,选择一家合适的英语雅思培训学校机构辅导机构,是助力孩子高效备考的关键一步,也是最让人头疼的难题。很多家长翻遍各类机构介绍,却分不清哪家的辅导模式适配孩子的学习…

全国支付宝立减金回收平台正规使用攻略

打开手机里的支付宝卡包,不少人会发现几张闲置的立减金,它们或是活动领取后未找到适配使用场景,或是有效期临近却暂无计划,最终只能默默过期。其实这些闲置的支付宝立减金并非毫无作用,通过正规的回收渠道就能合理…