首页 技术 正文
技术 2022年11月11日
0 收藏 651 点赞 2,564 浏览 40340 个字

volatile关键字的两层语义  一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:  1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。  2)禁止进行指令重排序。根据volatile的语义,我们可以看到,volatile主要针对的是并发三要素(原子性,可见性和有序性)中的后两者有实际优化作用。可见性:  线程本身并不直接与主内存进行数据的交互,而是通过线程的工作内存来完成相应的操作。这也是导致线程间数据不可见的本质原因。因此要实现volatile变量的可见性,直接从这方面入手即可。对volatile变量的写操作与普通变量的主要区别有两点:

  (1)修改volatile变量时会强制将修改后的值刷新的主内存中。  (2)修改volatile变量后会导致其他线程工作内存中对应的变量值失效。因此,再读取该变量值的时候就需要重新从读取主内存中的值。  通过这两个操作,就可以解决volatile变量的可见性问题。有序性:  volatile会触发jvm的内存屏障策略  <img src="data:image/png;base64,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" alt="" name="en-media:image/png:342c3c0cdb26b8ae70f401dd278b4cd6:none:none" />内存屏障策略:(1)LoadLoad 屏障  执行顺序:Load1—>Loadload—>Load2  确保Load2及后续Load指令加载数据之前能访问到Load1加载的数据。(2)StoreStore 屏障  执行顺序:Store1—>StoreStore—>Store2  确保Store2以及后续Store指令执行前,Store1操作的数据对其它处理器可见。(3)LoadStore 屏障  执行顺序: Load1—>LoadStore—>Store2  确保Store2和后续Store指令执行前,可以访问到Load1加载的数据。(4)StoreLoad 屏障  执行顺序: Store1—> StoreLoad—>Load2  每次对volatile进行读写操作,根据上述表格,会触发对应的CPU指令,从线程内存缓冲区将之前更改的变量刷入主存。  简单来说,volatile会在一定程度上影响jvm指令集的优化策略,在volatile之前和之后的指令集不会乱序越过volatile变量执行。暂时volatile之前和之后的指令集在没有关联性的前提下,jvm可以乱序执行。  jvm的volatile策略,在一定程度上,打折扣地实现了jvm的happens-before原则(先行发生原则),如下所述。 

  • 程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作
  • 锁定规则:一个unLock操作先行发生于后面对同一个锁额lock操作
  • volatile变量规则:对一个变量的写操作先行发生于后面对这个变量的读操作
  • 传递规则:如果操作A先行发生于操作B,而操作B又先行发生于操作C,则可以得出操作A先行发生于操作C
  • 线程启动规则:Thread对象的start()方法先行发生于此线程的每个一个动作
  • 线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生
  • 线程终结规则:线程中所有的操作都先行发生于线程的终止检测,我们可以通过Thread.join()方法结束、Thread.isAlive()的返回值手段检测到线程已经终止执行
  • 对象终结规则:一个对象的初始化完成先行发生于他的finalize()方法的开始

volatile常见使用场景:

(1)状态标记量

Java并发编程 Volatile关键字解析

(2)单例模式一次性安全发布

Java并发编程 Volatile关键字解析

(3)低开销读写锁

Java并发编程 Volatile关键字解析

参考文档:《Java并发编程:Volatile关键字解析》http://www.cnblogs.com/dolphin0520/p/3920373.html《Java多线程:volatile变量,happens-before关系及内存一致性》http://www.importnew.com/17149.html《Java并发编程:volatile的使用及其原理》http://www.cnblogs.com/paddix/p/5428507.html《Java理论与实践:正确使用Volatile变量》https://www.ibm.com/developerworks/cn/java/j-jtp06197.html

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,023
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,513
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,360
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,143
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,774
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,852