java内存模型

前言 在物理计算机中经常会出想并发的问题,并发执行若干个运算任务,更充分利用计算机处理器效能,看起来很简单,但是里面包含处理器与内存交互,线程与线程交互,读取运算数据,储存运算数据,缓存一致性等复杂问题。Java内存模型(JMM)定义程序中各个变量发访问规则,屏蔽了硬件与操作系统的内存访问差异,从而使java程序能供在各种平台达到一致的内存访问效果。

JMM定义的变量 JMM定义的变量包括实例字段,静态字段,构成数组对象,而局部变量,方法参数这些时线程私有的,所以不会发生线程安全问题。

主内存和工作内存 所有定义变量存储在主内存,每条线程都有自己的工作内存,用于拷贝主内存的数据,线程对变量的读取,赋值操作都在工作内存进行。工作内存对应物理位置应该是在CPU寄存器和CPU高速缓存中

内存间交互操作 数据在主内存和工作内存间的交互细节,JMM通过以下8种操作(具有原子性)完成

JMM规定了上述操作的限制

volatile关键字 被该关键字赋值的变量具有两种特性:

对于实现可见性,java还有final和synchronized可以实现

以下两条规则运算场景可以使用volitaile

long和double类型变量