定义 Java
内存模型并不是一件容易的事情,这个模型必须定义得足够严谨,才能让 Java
的并发操作不会产生歧义;但是,也必须得足够宽松,使得虚拟机的实现能有足够的自由空间去利用硬件的各种特性(寄存器
、高速缓存
等)来获取更好的执行速度。经过长时间的验证和修补,在JDK1.5
发布后,Java内存模型就已经成熟和完善起来了。
主内存和工作内存
Java
内存模型中规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存
(可以与前面将的处理器的高速缓存类比),线程的工作内存中保存了该线程使用到的变量到主内存副本拷贝,线程对变量的所有操作(读取
、赋值
)都必须在工作内存
中进行,而不能直接读写主内存中的变量。不同线程之间无法直接访问对方工作内存中的变量,线程间变量值的传递均需要在主内存来完成,线程、主内存和工作内存的交互关系如下图所示
volatile 关键字
关键字 volatile
可以说是 Java
虚拟机提供的最轻量级的同步机制,我们来理解