這個命題是正確的,但是也不是必須的。
該命題的存在是Java內存模型要求lock, unlock, read, load, assign, use, write這個8個操作都具有原子性,但是同時又對64位的數據類型(long&double)給了一個相對寬鬆的規定,就是允許虛擬機將沒有被volatile參數修飾的64位數據類型的讀寫劃分爲兩次32位的操作來進行,即允許虛擬機將load, store, read, write這個4個操作實現爲非原子的。
既然如此爲何又是非必須的呢?JSR對於商用的JVM,強烈建議將這個四個操作實現爲原子操作,而且目前各平臺下的商用JVM幾乎都將其實現爲了原子操作。因此我們再編寫代碼的時候沒有必要把用到的long,double專門修飾爲volatile變量。
參考: 《深入理解Java虛擬機》