Java volatile关键字分析

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

结构图如下:

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

相关推荐
zyseo84 小时前
谷歌SEO 内链地图脚本:Python 画出权重分发,揪出孤岛页
java·前端·python
Sayai5 小时前
Java 进程 Unable to create new native thread 排查实战:Linux 线程数五层限制与 JVM -Xss 调优
java·linux·运维·jvm·性能优化
wuminyu5 小时前
Continuation::freeze与thaw的x86_64汇编Stack Chunk拆解源码分析
java·linux·c语言·汇编·jvm·c++
事圆则缓5 小时前
Kotlin学习导航:从知识树走到项目与面试
android·开发语言·kotlin
程序员夏洛5 小时前
TCP 是用来解决什么问题?
java·网络协议·http·https
kunicoding5 小时前
C++ 策略模式实战:写一个可以“一键换输出“的日志系统
开发语言·c++·策略模式
y = xⁿ5 小时前
拆解cloud code记忆系统
java·人工智能·python·github
纪念 2295 小时前
C++算法(三)
开发语言·c++·算法
csdn_zhangchunfeng5 小时前
linux 如何安装rst2man命令
开发语言·chrome·python
轮子大叔5 小时前
Hibernate6.x详解
java