一.什么是JMM
Java内存模型是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制和规范。
Java内存模型规定所有的变量都存储在主存中,包括实例变量,静态变量,但是不包括局部变量和方法参数。每个线程有自己的工作内存,线程的工作内存保存了该线程用到的变量和主内存的副本拷贝,线程对变量的操作都在工作内存内进行,线程不能直接读写主存中的变量。不同线程之间无法访问对方工作内存中的变量,线程之间值的传递都需要通过主内存来完成。
二.JMM的作用
Java内存模型是一套在多线程读写共享数据时,对共享数据的原子性,可见性,有序性的规则和保障。解决缓存一致性和CPU指令重排序。
原子性:一个操作是一个不可分割的,连续的不可中断的过程,要么全部执行,要么都不执行。
可见性:当一个线程对主内存的共享变量进行了修改,其他线程能立即看到修改后的最新值。
有序性:代码的执行顺序和编写代码的顺序一致。