volatile的作用及原理

Posted zhaoatian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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关键字

 

以上是关于volatile的作用及原理的主要内容,如果未能解决你的问题,请参考以下文章

Java 并发volatile 的原理和作用

Java 并发编程:volatile的使用及其原理

362volatile底层原理详解

volatile底层原理详解

java关键字 volatile的作用及使用说明

Java多线程的volatile底层实现原理