Java内存模型(java线程内存模型)
read:从主存中读取数据
load:将读取的数据存进线程中的工作内存
use:使用工作内存中的数据,进行操作
assign:将use后的数据写回工作内存
store:将工作内存的数据放回主存中(并没有写,没有赋值原来的值)
write:将store过来的值赋值给主存中原来的数据
volatile可见性原理:
如图所示,当某个线程中的数据变化,并使用store操作放回主存时,需要通过总线,总线的MESI缓存一致性协议开启时,也会开启总线嗅探机制,当总线感到store时,会触发。其他线程会将自己的工作内存的数据失效,并重新从主存中获取数据。
在store操作之前lock,可以防止在进行store操作后,write操作前,这个时间差中,有其他线程从主存中获取数据,从而导致数据不一致。