特別是在 多個CPU的狀況下, 併發的時候, 應該優先考慮使用 volatile 關鍵字。 能夠讓 程序 按照 代碼的 的前後順序執行。不然可能 後寫的代碼 先執行。 由於 JVM 會可能會對 代碼 的執行進行 重排序,重排序是爲了提升程序執行的效率。 但是在併發的時候,就容易出現 一下 問題了。併發
使用volatile變量的第二個語義是禁止指令重 排序優化, 普通的變量僅僅會保證在該方法的執 行過程當中全部依賴賦值結果的地方都能獲取到正 確的結果, 而不能保證變量賦值操做的順序與程序代碼中的執行順序一致。 由於在一個線程的方 法執行過程當中沒法感知到這點, 這也就是Java內 存模型中描述的所謂的「線程內表現爲串行的語 義」(Within-Thread As-If-Serial Semantics) 。優化
《深刻理解JVM虛擬機》線程