爲實現Java內存模型,對非volatile的long或double值的一次寫操作是被當做兩次獨立地寫操作來處理的:每次寫一半——32位。這會導致一種情況,一個線程看到一個寫操作寫入的前32位,另一個寫操作寫入的後32位。
對volatile的long和double值的讀與寫總是原子的。
對引用的讀與寫總是原子的,不管它們是用32位還是64位實現的。
一些實現可以方便地將64位long或double值上的一次寫操作分成相鄰的32位值的兩次寫操作。
爲提高效率,這種行爲是特定於實現的;java虛擬機實現可以自由選擇原子的或分成兩次寫入long或double值。
Java虛擬機規範鼓勵儘可能避免分開處理64位值,同時鼓勵程序員將共享的64位值聲明爲volatile或正確地使用同步以避免併發問題。