标签:初始化 volatile 指令 线程 内存 new 原理 作用
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,指令,线程,内存,new,原理,作用 来源: https://www.cnblogs.com/zhaoatian/p/12344974.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。