面試題:double和long為什么不是線程安全的?


Java虛擬機規范定義的許多規則中的一條:所有對基本類型的操作,除了某些對long類型和double類型的操作之外,都是原子級的。
 
目前的JVM(java虛擬機)都是將 32位作為原子操作,並非64位。
當線程把主存中的 long/double類型的值讀到線程內存中時,可能是 兩次32位值的寫操作,顯而易見,如果幾個線程同時操作,那么就可能會出現高低2個32位值出錯的情況發生。
要在線程間共享long與double字段是,必須在synchronized中操作,或是聲明為volatile。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM