非原子的double和long

爲實現Java內存模型,對非volatile的long或double值的一次寫操作是被當做兩次獨立地寫操作來處理的:每次寫一半——32位。這會導致一種情況,一個線程看到一個寫操作寫入的前32位,另一個寫操作寫入的後32位。

對volatile的long和double值的讀與寫總是原子的。

對引用的讀與寫總是原子的,不管它們是用32位還是64位實現的。

一些實現可以方便地將64位long或double值上的一次寫操作分成相鄰的32位值的兩次寫操作。

爲提高效率,這種行爲是特定於實現的;java虛擬機實現可以自由選擇原子的或分成兩次寫入long或double值。

Java虛擬機規範鼓勵儘可能避免分開處理64位值,同時鼓勵程序員將共享的64位值聲明爲volatile或正確地使用同步以避免併發問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章