Java线程工作内存与主内存变量交换过程及volatile关键字理解
2016-07-25 17:30
441 查看
Java线程工作内存与主内存变量交换过程及volatile关键字理解
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)禁止指令重排
参考:
《深入理解Java虚拟机》第12章 Java内存模型与线程
相关文章推荐
- spring事务
- 关于java注解使用的例子
- HashMap使用Comparator排序
- Ubuntu安装JDK1.8
- JAVA XML的解析与创建
- 跟我读Spring——Spring源码浅析(前序)
- eclipse svn插件 links方式
- myeclipse中的类恢复之前的版本方法
- com.alibaba.dubbo.rpc.RpcException
- Eclipse 通过JPA自动生成注解实体
- Java编程思想第4版-第三章
- Spring系列之对Bean的认识
- java实现post方法
- Java中ArrayList和LinkedList区别
- 一致性哈希算法及java实现
- java强引用、软引用、弱引用、虚引用区别
- Spring security oauth2最简单入门环境搭建
- java中的匿名内部类总结
- java有序数组
- java基础-继承