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

相關文章
相關標籤/搜索