共享模式之内存

四、共享模式之内存

4.1java内存模型

JMM即Java Memory Model,他定义了主存,工作内存抽象概念,底层对应着cpu寄存器,缓存、硬件内存、cpu指令优化等。

JMM主要体现在以下几个方面

  • 原子性:保证指令不会受到线程上下文切换
  • 可见性:保证指令不会受到cpu缓存的影响
  • 有序性:保证指令不会受到指令cpu指令并行优化的影响
4.2可见性

退不出的循环

Volatile原理
  • volatile的底层实现原理是内存屏障
    • 对volatile变量的写指令后会加入写屏障
    • 对volatile变量的读指令前会加入读屏障
volitail变量的如何保证可见性
  • 写屏障,保证在该屏障之前,对共享变量的改动,都同步到主存当中
private boolean read == false;
public void test(){
    num = 2;
    read = true; //对共享变量进行了读,那么从这一句之后就开始加入了写屏障
    //写屏障
}
  • 读屏障,保证了在该屏障之后,对共享变量的读取,加载的都是主存中最新的数据
public void actors(){
    //读屏障
    //.....这后面都是读屏障的内容
    if(ready){
        r=num+num;//像这种num共享变量都是从主存中拿到的最新数据
    }
}
volatile变量如何保证有序性
  • volatile写屏障保证了写屏障之前的指令不会重排到写屏障之后
  • volatile读屏障保证了读屏障之后的指令不会重排到读屏障之前
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值