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