Java volatile关键字分析

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

结构图如下:

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

相关推荐
wifi___4 小时前
全局异常处理的原理
java·开发语言
平常心的技术小牛7 小时前
Qt-快速上手-QMenuBar
开发语言·qt
青 春 记 忆7 小时前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
2601_963870208 小时前
【计算机毕业设计】基于Spring Boot的专科医院医疗管理系统
java·spring boot·课程设计
Bingo_BIG8 小时前
Java Spring 批量修改,实体、接口、方法的定义
java·spring
晏宁科技YaningAI8 小时前
企业通信系统架构设计方法论
性能优化·系统架构·gateway·paas
Mh8 小时前
虚拟滚动真的比普通滚动性能更好吗?
前端·javascript·性能优化
画中有画8 小时前
软件架构中质量属性(性能、安全、可扩展性)的权衡设计
java·运维·安全
Shaoxi Zhang9 小时前
JAVA学习笔记035——对象和JSON格式
java·笔记·学习
赵丙双9 小时前
CountDownLatch 源码分析
java·aqs·countdownlatch