Java volatile关键字分析

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

结构图如下:

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

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