線程之間的共享變量存儲在主內存(main memory)中,每一個線程都有一個私有的本地內存(local memory),本地內存中存儲了該線程以讀/寫共享變量的副本。緩存
本地內存是JMM(Java內存模型)的一個抽象概念,並不真實存在。它涵蓋了緩存,寫 緩衝區,寄存器以及其 他的硬件和編譯器優化。Java內存模型的抽象示意圖以下圖:多線程
對於一個簡單的 i++ 操做,結合上圖1 ,會發生以下的步驟:優化
因此說,一個 i++操做並非原子性的。這上述的這些步驟中,可能會有其餘線程對主內存的變量進行操做,從而致使出現多線程問題。線程