volatile 三部曲之可見性



可見性




LOCK
1. 線程 1 對共享變量的修改,如果剛剛將其值寫入自己的緩存,卻還沒有刷新到內(nèi)存,此時內(nèi)存的值仍為舊值。
2. 即使線程 1 將其修改后的值,從緩存刷新到了內(nèi)存,但線程 2 仍然從自己的緩存中讀取,讀到的也可能是舊值。


add [某內(nèi)存地址], 1lock add [某內(nèi)存地址], 1
JMM


volatile

volatile int a;



后記
后記
寫這篇文章時真的是瑟瑟發(fā)抖,一是因為網(wǎng)上講這個知識點的實在太多了,二是我發(fā)現(xiàn) volatile 這個知識點水很深,從底層硬件一直到上層語言,每一層都有實現(xiàn)原理,層層抽象直到上層表現(xiàn)為我們看到的樣子。
我甚至覺得不可能有人對這個知識點完全理解透徹。緩存一致性和總線嗅探,你需要了解 CPU 硬件的原理吧?JMM 內(nèi)存模型,你需要了解 JVM 虛擬機實現(xiàn)吧?
或者不說實現(xiàn)的事兒,就單單是 JMM 說了什么,很多人覺得懂了,但你看過 JSR133 文檔對 JMM 模型的正式規(guī)范么?很長,給大家隨便截取一小段。

評論
圖片
表情
