我看了volatile的概念和例子,有一個例子是比較使用或者不使用volatile關鍵字的區別。
我兩份代碼全部運行後,結果卻是一樣的。這是為什麼呢?
是否是JDK1.8 已經不需要 volatile 關鍵字了呢?
volatile 強調的領域,應該是在嵌入式設備上的(可能有誤)。因為在嵌入式設備,我們的程序運行的時候,會讀取寄存器的值,有些是傳感器的值。在程序運行時,當你定義了一個變量,它的值是從某個寄存器的地址取值得到。如果你在定義這個變量的時候,沒有加 volatile ,那麼編譯器會優化,為什麼會優化呢,你可以這麼思考,你在程序while循環裡面定義了一個INT 變量 ,賦值為1.當循環第二次到這裡的時候,編譯器說你上次就是1,這次也是1。“int a = 1”,這樣看是不是很有道理。但是在嵌入式設備上就不一樣了,因為你每次給A賦值的時候是從寄存器裡面取得,寄存器的值是會變的,比方一個溫度傳感器寄存器。那麼程序在第一次的時候去了正確的值,後面每一次都是第一次的值,顯然這樣是不行的,這就是編譯器的優化。加了 volatile 編譯器就不會優化,每次程序都會去指定的地址去取值。