JMM本身是一个抽象的概念,不是真实存在的,它仅仅是一种规定或者说是规范
1.用来实现线程和主内存直接的抽象关系
2.屏蔽各个硬件平台和操作系统的内存访问差异,使得java程序在各种平台都能达到一致的内存访问效果
JMM的三大特性
可见性
多线程环境下,某个线程修改了变量,能够通知其他线程。
new出来的对象就在主内存里面
共享变量也在主内存中
A不能操作B线程,先由A给主内存,再让B读取
线程脏读
为了解决这个问题:
改的时候只有1个线程来改,保证原子性,改完后立刻通知别人,主内存的值已经更新了,去拿最新的。
这样才能避免脏读。可见性是一种及时通知机制