概念:
内存模型: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 关键字是主动将变量及时刷新,实现线程间的共享,但单不能保证安全性
本文深入探讨Java内存模型(JMM)的概念,解释多线程环境下共享变量的可见性和同步机制。通过具体代码示例,展示volatile关键字如何确保变量在多线程间正确共享,避免数据同步问题。
737

被折叠的 条评论
为什么被折叠?



