Java volatile关键字分析

每个线程创建时,JVM会为其创建一份私有的工作内存(栈空间),不同线程的工作内存之间不能直接互相访问
JMM规定所有的变量都存在主内存,主内存是共享内存区域,所有线程都可以访问
线程对变量进行读写,会从主内存拷贝一份副本到自己的工作内存,操作完毕后刷新到主内存。所以,线程间的通信要通过主内存来实现。
volatile的作用是:线程对副本变量进行修改后,其他线程能够立刻同步刷新最新的数值。这个就是可见性。

结构图如下:

能够保存可见性,但不能保持原子性,如果变量有先后顺序的话可能会发现运行错误

相关推荐
宸津-代码粉碎机2 分钟前
Spring AI 企业级RAG实战|增量更新+文档去重+定时自动入库生产落地方案
java·大数据·人工智能·后端·python·spring
Raink老师3 分钟前
【AI面试临阵磨枪-92】Skill 开发规范:命名、文档、测试、日志、监控、告警?
java·面试·log4j
Evand J4 分钟前
【代码介绍】自适应R的AEKF(自适应扩展卡尔曼滤波)和经典EKF比较,MATLAB例程|三维非线性系统
开发语言·matlab·ekf·自适应·自适应滤波
UWA11 分钟前
5 月刊|GPM 2.0 实现全场景可视化溯源、多维度数据解析与根因精准定位
性能优化·游戏开发·uwa
雪的季节12 分钟前
1 个网络线程 + 3 个数据处理线程(完全隔离)
开发语言
weixin_4080996713 分钟前
2026 AI生成图片快速去水印的5种实测方法(附在线工具 + Python/Java/PHP API代码)
java·人工智能·python·api接口·ai去水印·石榴智能·自动去水印
风筝在晴天搁浅13 分钟前
快手 CodeTop LeetCode 227.基本计算器Ⅱ
java·开发语言
JAVA面经实录91716 分钟前
RabbitMQ全套学习知识手册
java·rabbitmq
0xDevNull19 分钟前
Java实战面试题(一)
java·开发语言
好家伙VCC19 分钟前
动态因子图谱+滚动SHAP重构量化模型可解释性
java·人工智能·重构