volatile實現可見性的原理解釋

在java併發編程中,一定繞不開volatile、synchronized和lock幾個關鍵字,其中volatile關鍵字是用來解決共享變量(類成員變量、類的靜態成員變量等)的可見性問題的,非共享變量(方法的局部變量)是分配在JVM虛擬機的棧中,是線程私有的,不涉及可見性問題。那麼什麼是可見性?
可見性:在JAVA規範中是這樣定義的:java編程語言允許線程訪問共享變量,爲了確保共享變量能被準確和一致地更新,線程應該確保通過排他鎖單獨獲得這個變量。通俗的將就是如果有一個共享變量N,當有兩個線程T1、T2同時獲取了N的值,T1修改N的值,而T2讀取N的值。那麼可見性規範要求T2讀取到的必須是T1修改後的值,而不能在T2讀取舊值後T1修改爲新值。volatile關鍵字修飾的共享變量可以提供這種可見性規範,也叫做讀寫可見。那麼底層實現是通過機制保證volatile變量讀寫可見的?
Volatile的實現機制:在說這個問題之前,我們先看看CPU是如何執行java代碼的。


首先編譯之後Java代碼會被編譯成字節碼.class文件,在運行時會被加載到JVM中,JVM會將.class轉換爲具體的CPU執行指令,CPU加載這些指令逐條執行。

 

以多核CPU爲例(兩核),我們知道CPU的速度比內

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章