Java volatile关键字分析

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

结构图如下:

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

相关推荐
代码小书生几秒前
time,一个时间操作的 Python 库!
开发语言·python·microsoft
彦为君1 分钟前
JavaSE-11-网络编程(详细版)
java·前端·网络·ai·ai编程
C+-C资深大佬5 分钟前
在C++中,const和#define有什么区别?
开发语言·c++
毅炼7 分钟前
今日LeetCode 摸鱼打卡
java·算法·leetcode
一个做软件开发的牛马13 分钟前
我用 Java 写了一个猜数字游戏,踩了 3 个流程控制的坑
java
Byron070713 分钟前
后端架构核心技术栈详解
java·架构
Deep-w20 分钟前
【MATLAB】基于 MATLAB/Simulink 的无刷直流电机(BLDC)转速控制模糊 PID 算法
开发语言·算法·matlab
专注VB编程开发20年25 分钟前
Python 的 C 扩展,本质上就是“去中心化的 COM”
java·服务器·开发语言·ide·python
LB211226 分钟前
消灭并发重复调用:基于 Agent 调用 LLM 的分布式 Single-Flight 实战
java·开发语言·redis·分布式·agent
JAVA社区34 分钟前
Java进阶全套教程(七)—— Redis超详细实战详解
java·linux·开发语言·redis·面试·职场和发展