在Java中, volatile关键字可以保证变量的可见性,如果我们将变量声明为 volatile,这就指示 JVM,这个变量是共享且不稳定的,每次使用它都到主存中进行读取。


Java内存模型:
1.Java所有变量都存储在主内存中
2.每个线程都有自己独立的工作内存
变量副本就是主内存中该变量的一份拷贝
1.线程对共享变量的所有操作都必须在自己的工作内存中进行,不能直接在主内存中读写
2.不同线程之间无法直接访问其他线程工作内存中的变量,线程间变量值的传递需要通过主内存来完成
可见性:一个线程对共享变量的修改,能够及时的被其他线程看到的
如上图:线程1在它的工作内存1对共享变量修改,更新到主内存中,将主内存中最新的共享变量更新到线程2 的工作内存2中。
volatile实现内存可见性是通过store和load指令完成的;也就是对volatile变量执行写操作时,会在写操作后加入一条store指令,即强迫线程将最新的值刷新到主内存中;而在读操作时,会加入一条load指令,即强迫从主内存中读入变量的值。