>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 20691 个阅读者 刷新本主题
 * 贴子主题:  volatile 实现原理 回复文章 点赞(0)  收藏  
作者:javathinker    发表时间:2020-03-23 17:42:08     消息  查看  搜索  好友  复制  引用

    volatile变量自身具有下列特性:
  •    可见性。对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。
  •    原子性:对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性。
  其实现原理为:

      1,通过插入内存屏障指令禁止编译器和CPU对程序进行重排序。

      2,当对声明了volatile的变量进行写操作时,JVM就会向处理器发送一条Lock前缀的指令,这条Lock前缀指令产生如下两个作用:

          1)Lock前缀指令会引起处理器缓存回写到系统内存,并使用缓存一致性机制来确保回写的原子性。

          2)一个处理器的缓存回写到系统内存会导致其他处理器的缓存无效。处理器使用MESI控制协议去维护内部缓存和其他处理器缓存的一致性。处理器能嗅探其他处理器访问系统内存和它们的内部缓存。处理器使用嗅探技术保证它的内部缓存、系统内存和其他处理器的缓存的数据在总线上保持一致。例如,在Pentium和P6 family处理器中,如果通过嗅探一个处理器来检测其他处理器打算写内存地址,而这个地址当前处于共享状态,那么正在嗅探的处理器将使它的缓存行无效,在下次访问相同内存地址时,强制执行缓存行填充。

            

----------------------------
原文链接:https://blog.51cto.com/wenshengzhu/2056138

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-03-23 17:42:08 重新编辑]
  Java面向对象编程-->Swing组件(上)
  JavaWeb开发-->Web运作原理(Ⅲ)
  JSP与Hibernate开发-->持久化层的映射类型
  Java网络编程-->Java反射机制
  精通Spring-->虚拟DOM和render()函数
  Vue3开发-->Vue简介
  BIO和NIO区别
  从实战角度解读JVM:类加载机制+JVM调优实战+代码优化!
  Java设计模式: 里氏替换原则和合成复用原则详解
  面向对象的七大原则,你知道几个?
  Java泛型中的通配符 T,E,K,V,? 你了解吗
  使用策略模式优化代码实践,如何让项目快速起飞
  用注解去代替if-else的技巧
  [讨论]书中多线程章节的语言表述有误?
  害怕面试被问HashMap?
  超详细的Java运算符修炼手册(优秀程序员不得不知道的运算技...
  邀请您一起来祝福和祈祷,祈愿疫情早日消除,平安吉祥
  JNI_Java Native Interface的用法
  Eclipse使用指南:Debug 配置
  JAVA日期加减运算
  Java程序初始化顺序(一看就懂)
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。