Java内存模型(java线程内存模型)

Java内存模型(java线程内存模型)

read:从主存中读取数据

load:将读取的数据存进线程中的工作内存

use:使用工作内存中的数据,进行操作

assign:将use后的数据写回工作内存

store:将工作内存的数据放回主存中(并没有写,没有赋值原来的值)

write:将store过来的值赋值给主存中原来的数据

 

volatile可见性原理:

     如图所示,当某个线程中的数据变化,并使用store操作放回主存时,需要通过总线,总线的MESI缓存一致性协议开启时,也会开启总线嗅探机制,当总线感到store时,会触发。其他线程会将自己的工作内存的数据失效,并重新从主存中获取数据。

    在store操作之前lock,可以防止在进行store操作后,write操作前,这个时间差中,有其他线程从主存中获取数据,从而导致数据不一致。