java多线程内存模型

Java多线程内存模型

java多线程内存模型跟cpu缓存模型类似,是基于cpu缓存模型建立的,java线程内存模型是标准化的,屏蔽掉了底层计算机的区别
在这里插入图片描述

public class practice {

    public static boolean flag=false;
    public static void main(String[] args) {

        new Thread(()->{
            System.out.println("11111111111");
            while (!flag){

            }
            System.out.println("22222222222222");
        }).start();

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        new Thread(()->change()).start();
    }

    public static void change(){
        System.out.println("33333333333333");
        flag=true;
        System.out.println("4444444444444444");
    }
}

在这里插入图片描述
注意这里可以看到结果并没有输出2222222 也就是说在线程一里flag还是false,说明线程一里的工作内存有自己的副本,线程2修改副本里的flag,线程一感受不到

那怎么能让多线程感受到呢?
加入 volatile关键字

volatile关键字

在这里插入图片描述
在这里插入图片描述
这里我们发现加入关键字后就可以输出222222
但面试不会简单的考你用法,我们来深入研究一下这个关键字
我们发现当flag变为true时他会先写到主内存中,再由总线嗅探机制感应到改变,从此线程一拿到的就是改变后的值了
在这里插入图片描述
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值