volatile关键字详解

Volatile的特征:ide

A、禁止指令重排(有例外) 
B、可见性spa

Volatile的内存语义:.net

当写一个volatile变量时,JMM会把线程对应的本地内存中的共享变量值刷新到主内存。线程


这里写图片描述


当读一个volatile变量时,JMM会把线程对应的本地内存置为无效,线程接下来将从主内存中读取共享变量。orm


这里写图片描述


Volatile的重排序blog

一、当第二个操做为volatile写操作时,无论第一个操做是什么(普通读写或者volatile读写),都不能进行重排序。这个规则确保volatile写以前的全部操做都不会被重排序到volatile以后;排序

二、当第一个操做为volatile读操做时,无论第二个操做是什么,都不能进行重排序。这个规则确保volatile读以后的全部操做都不会被重排序到volatile以前;图片

三、当第一个操做是volatile写操做时,第二个操做是volatile读操做,不能进行重排序。内存

这个规则和前面两个规则一块儿构成了:两个volatile变量操做不可以进行重排序;it

除以上三种状况之外能够进行重排序。

好比:

一、第一个操做是普通变量读/写,第二个是volatile变量的读; 
二、第一个操做是volatile变量的写,第二个是普通变量的读/写;

原文连接: http://blog.csdn.net/sinat_35512245/article/details/60325685

相关文章
相关标签/搜索