java中volatile關鍵字到底是干什么的?

volatile關鍵字到底是干什么的?(新手可略過)
馬克- to-win:馬克 java社區(qū):防盜版實名手機尾號: 73203。
我們先簡要了解一下java虛擬機的內存模型。就像數(shù)據(jù)從物理內存拷貝到cpu高速緩存,進行操作完,再把數(shù)據(jù)返回到內存一樣,為了屏蔽CPU高速緩存和內存復雜細節(jié)且贏得跨平臺的效果,java把所有的變量都存在主存(相當于物理內存)當中,每個線程都有自己的工作內存(相當于CPU高速緩存)。線程在自己的工作內存做操作,不能直接對主存進行操作,最后把結果返回到主存。如果一個變量有volatile(易變的意思)修飾詞,這意味著當有一個線程修改了這個變量,系統(tǒng)會把工作內存當中的變化強制立刻反應在主存當中。其他線程要想讀這個變量,也會被強迫讀變化了的新值。volatile其實就保證了此變量無論怎么變,任何線程看都是最新的。當兩個線程,根據(jù)一個共同的信號,做互動時,一定要加volatile,保證這個信號是最新的。

volatile,有人說能夠控制程序的語句有序性,但jvm并不能保證在所有的平臺上都能夠做到這一點,所以我的書中就不贅述了。既然volatile控制程序語句的有序性不能保證所有的平臺都正確運行,基于它的技術“雙重檢查鎖”創(chuàng)建單態(tài)對象也就變得不可靠了,本書也就不覆蓋了。