Java线程工作内存与主内存变量交换过程及volatile关键字理解
来源:互联网 发布:淘宝买的手机如何保修 编辑:程序博客网 时间:2024/06/07 01:48
1. Java内存模型规定在多线程情况下,线程操作主内存变量,需要通过线程独有的工作内存拷贝主内存变量副本来进行。此处的所谓内存模型要区别于通常所说的虚拟机堆模型:
2. 线程独有的工作内存和进程内存(主内存)之间通过8中原子操作来实现,如下图所示:
原子操作的规则(部分):
1) read,load必须连续执行,但是不保证原子性。
2) store,write必须连续执行,但是不保证原子性。
3) 不能丢失变量最后一次assign操作的副本,即遍历最后一次assign的副本必须要回写到MainMemory中。
其它规则详见《深入理解Java虚拟机》第12章 Java内存模型与线程
3. volatile关键字
定义为volatile类型的变量拥有两种语义:
1) 变量的修改对所有线程可见
理解:
线程中每次use变量时,都需要连续执行read->load->use几项操作,即所谓的每次使用都要从主内存更新变量值,这样其它线程的修改对该线程就是可见的。
线程每次assign变量时,都需要连续执行assign->store->write几项操作,即所谓每次更新完后都会回写到主内存,这样使得其它线程读到的都是最新数据。
2)禁止指令重排
文章转载自:http://www.cnblogs.com/wrencai/p/5704331.html,感谢分享!
阅读全文
0 0
- Java线程工作内存与主内存变量交换过程及volatile关键字理解
- 全面理解Java内存模型(JMM)及volatile关键字
- 全面理解Java内存模型(JMM)及volatile关键字
- 全面理解Java内存模型(JMM)及volatile关键字
- java多线程之volatile关键字与线程栈内存
- jvm住内存与工作内存,内存模型反映的java多线程问题,volatile修饰变量
- java内存模型及volatile关键字解析
- Java 线程通信内存模型---主内存与工作内存
- Java内存模型与volatile关键字
- Java内存模型与volatile关键字
- Java内存模型与volatile关键字
- volatile关键字与Java同步内存模型
- Java内存模型与volatile关键字
- java内存模型与volatile关键字
- java内存模型:volatile变量、与synchronized
- 深入理解JVM读书笔记五: Java内存模型与Volatile关键字
- 从Java内存模型理解synchronized、volatile和final关键字
- Java内存模型&volatile关键字
- Java中的两种异常类型是什么?他们有什么区别?
- TCP协议
- 基于rk3288平台android5.1系统的wifi流程分析 ---- 连接热点
- Java全局变量与局部变量的整理
- 真正从零开始,TensorFlow详细安装入门图文教程
- Java线程工作内存与主内存变量交换过程及volatile关键字理解
- sun.misc.BASE64Encoder在Eclipse中不能直接使用的原因和解决方案
- 注解Butterknife使用 代替findViewById
- matlab 排序 sorttrows
- 搭建环境(二)Ubuntu14.04安装CUDA8.0
- 108. Convert Sorted Array to Binary Search Tree
- 关于..\相对路径拼接
- Android JNI踩坑
- sosoapi 项目之本地搭建