==================================================================
浅析java内存模型--JMM(Java Memory Model)
全面理解JAVA内存模型
2.1 Java 内存模型的基本原理
Java 内存模型,由于 Java 被设计为 跨平台 的语言,在内存管理上,显然也要有一个统一的 模型。系统存在一个 主内存 (Main Memory) , Java 中所有变量都储存在主存中,对于所有线程都是共享的 。 每条线程都有自己的 工作内存 (Working Memory) , 工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问 ,变量传递均需要通过主存完成。
因为当线程处于不同的cpu中时,它各自的变量保存在各自cpu的寄存器或者高速缓存中,这样回事的变量对于其它线程暂时不可见。
2.2 Volatile 的内存工作原理
Volatile 是保证多个线程之间变量可见性的 ,也就是说一个线程对变量进行了写操作,另外一个线程能够获取它最新的值。
它的工作原理是,它对写和读都是直接操作工作主存的。(这个可以通过操作字节码看到)
2.3 Synchronized 的内存操作模型 :
Synchronized, 有两层语义,一个是互斥,一个是可见性。在可见性上面,它的工作原理有点不同:当线程进入同步块时,会从主存里面获取最新值,然后当线程离开同步块时,再把变量的值更新到主存。
http://tomyz0223.iteye.com/blog/1001778
===================================================================