概念:
内存模型:Java Memory Model,简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。
如上图所示:每个线层都有属于自己的内存,并且拥有主内存赋值过去的变量,线程对变量的的操作会直接刷新主内存中的数据 会立即更新到子线程中的对应的变量,如果没有立即更新就不再更新 例如用了Thread.sleep();那么主内存不再刷新子内存。代码如下:
package wxtest;
class test00001 extends Thread {
private boolean flag = true;
@Override
public void run() {
System.out.println("开始");
while (flag) {
}
System.out.println("结束");
}
public void setFlag(boolean flag) {
this.flag = flag;
}
}
public class Test002 {
public static void main(String[] args) throws InterruptedException {
test00001 test = new test00001();
test.start();
Thread.sleep(3000);
test.setFlag(false);
System.out.println("flag已经修改为flase");
}
}
启动项目效果是 程序一直处于运行状态。因为修改flag值没有同步到test00001线程的变量中;
修改方案是将
private volatile boolean flag = true; volatile 关键字是主动将变量及时刷新,实现线程间的共享,但单不能保证安全性