线程总结之volitile(一)

概念:

内存模型: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 关键字是主动将变量及时刷新,实现线程间的共享,但单不能保证安全性

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值