zoukankan      html  css  js  c++  java
  • volatile的作用及原理

    1. volatile的作用

      保证共享变量对于多线程之间的可见性

      防止指令重排序

    2. 计算机的组成

       

      程序启动后,会加载到内存中

      内存中会有多条指令,由pc程序计数器来记录指令地址

      指令执行,内存中的数据放入寄存器,ALU运算单元计算,计算完成后返回到寄存器,然后写入到内存

    3. 线程可见性

      

      可见性 多个线程访问同一个共享变量时,其中一个线程对这个共享变量值的修改,其他线程能够立刻获得修改以后的值,到内存获取

    4. 指令从排序  

      new 一个对象的过程

      NEW java/lang/Object   初始化,比如int i  的值为0
      DUP  
      INVOKESPECIAL java/lang/Object.<init> ()V  调用构造方法赋值i
      ASTORE 1

      RETURN

      

      一个线程,对象还没初始化,只是new,另一个线程就拿到这个值去用,必须要防止指令重排,加上关键字volatile,JVM会加上内存屏障

      

    volatile就是让线程之间可见,赋值的操作,告诉另一个线程直接去内存中取值,new对象的过程中,有一个中间态,会有个半初始化状态,会发生指令重排序的操作,导致执行的顺序不一致,dcl单例必须加上volatile关键字

  • 相关阅读:
    mitmproxy的安装和使用
    CMake优先链接静态库
    IPv6与IPv4的兼容
    OpenSSL证书认证过程
    Lua os.clock在win和linux下的差异
    FocalLoss的pytorch代码实现
    单词解释
    将分割图和原图合在一起
    colab如何使用tensorboard
    PyTorch模型加载与保存的最佳实践
  • 原文地址:https://www.cnblogs.com/zhaoatian/p/12344974.html
Copyright © 2011-2022 走看看