变量a,b是非volatile修饰的变量,k则使用volatile修饰 。所以语句3不能放在语句1、2前,也不能放在语句4、5后 。但是语句1、2的顺序是不能保证的,同理,语句4、5也不能保证顺序 。
并且,执行到语句3的时候,语句1,2是肯定执行完毕的,而且语句1,2的执行结果对于语句3,4,5是可见的 。
volatile禁止指令重排序的原理是什么
首先要讲一下内存屏障,内存屏障可以分为以下几类:
LoadLoad 屏障:对于这样的语句Load1,LoadLoad,Load2 。在Load2及后续读取操作要读取的数据被访问前,保证Load1要读取的数据被读取完毕 。
StoreStore屏障:对于这样的语句Store1,StoreStore,Store2,在Store2及后续写入操作执行前,保证Store1的写入操作对其它处理器可见 。
LoadStore 屏障:对于这样的语句Load1,LoadStore,Store2,在Store2及后续写入操作被刷出前,保证Load1要读取的数据被读取完毕 。
StoreLoad 屏障:对于这样的语句Store1,StoreLoad,Load2,在Load2及后续所有读取操作执行前,保证Store1的写入对所有处理器可见 。
在每个volatile读操作后插入LoadLoad屏障,在读操作后插入LoadStore屏障 。
文章插图
在每个volatile写操作的前面插入一个StoreStore屏障,后面插入一个SotreLoad屏障 。
文章插图
大概的原理就是这样 。
面试官:讲得还不错,基本上都讲到了,时间也不早了,今天的面试就到这吧,回去等通知吧~
总结
要学习并发编程,java内存模型是第一站了 。原子性,有序性,可见性这三大特征几乎贯穿了并发编程,可谓是基础知识 。对于后面要深入学习起到铺垫作用 。
在这篇文章中,如果面试的话,重点是Java内存模型(JMM)的工作方式,三大特征,还有volatile关键字 。为什么喜欢问volatile关键字呢,因为volatile关键字可以扯出很多东西,比如可见性,有序性,还有内存屏障等等 。可以一针见血地看出面试者的技术水平,毕竟面试官也想高效地筛选出符合要求的人才嘛 。
本文为阿里云原创内容,未经允许不得转载 。
本文来源于发迹号www.fajihao.com
- 倾泻而下的意思是什么 亢奋什么意思
- 多愁善变人是什意思 多愁善感什么意思
- monsieur什么意思 month什么意思
- skimming是什么意思 chief是什么意思
- 正太头像动漫 正太什么意思
- 跟号外一样意思的词 号外什么意思
- 10月6日什么日子 7月20日是什么日子
- iama是什么意思 curly是什么意思
- 移动来电显示功能是什么意思 来电显示是什么
- twistzz翻译成中文是 twist是什么意思