JAVA内存模型定义了一个规范,那就是每个线程都有一个工作内存,线程操作共享变量的时候需要从主内存读取到工作内存,然后再传递给工作线程使用。共享变量修改后先刷新到工作内存,然后再刷新回主内存。 JMM定义了8种指令,它工作的时候就是通过这8种指令来操作内存的。 比如线程A要执行一个x++的操作,可能要经历下面的过程: lock和unlock JMM:Java 内存模型,是 Java 虚拟机规范中所定义的一种内存模型,Java 内存模型是标准化的,屏蔽掉了底层不用计算机的区别。 如何实现在多线程下访问共享变量的可见性:也就是实现一个线程修改变量后,对其他线程可见?
JMM 关于同步规定:
包括怎么锁定变量、怎么将数据从主存传到工作内存、怎么传给正在被CPU调度的线程、修改之后CPU怎么传回工作内存、工作内存又怎么传递回主存:


变量不可见性内存语义
Java 内存模型描述了 Java 程序中各种变量(线程共享变量)的访问规则,以及在 JVM 中将变量存储到内存和从内存中读取变量这样的底层细节。
JMM 具有以下规定:
变量不可见性解决方案
其中,volatile 保证不同线程对共享变量操作的可见性,也就是说一个线程修改了 volatile 修饰的变量,当修改写回主内存时,另外一个线程立即看到最新的值。所以,volatile 修饰的变量可以在多线程并发修改下,实现线程间变量的可见性。