当前位置: 首页 > news >正文

volatile 系列之如何解决可见性问题

        下面我们来看一下volatile是如何解决可见性问题的呢?如果我们针对stop字段增加volatile关键字:

public static volatile boolean stop=false;

        然后,使用hsdis工具获取IT编译器生成的汇编指令来查看volatile写操作带来的影响和变化。
        接着,设置JVM运行时参数:

-server -Xcomp -XX:+UnlockDiagnosticVMoptions -XX:+PrintAssembly -XX:CompileCommand = compileonly,*VolatileExample.*

得到的结果如下:

0x00000036864f3: lock add dword ptr [rsp],eh ;*putstatic stop
; - org.example.VolatileExample::<clinit>@1 (line 10)

        从上述结果中我们发现,在main线程中修改stop变量的值时,在修改命令前面会增加一个 Lock#信号,这使得基于缓存锁/总线锁的方式达到一致性,从而保证结果的可见。
        关于hsdis 工具的使用方法,(自己去查找一下相关资源),感兴趣的朋友可以自己学习。
        导致可见性问题的根本原因的分析到这里并没有结束,因为除高速缓存带来的可见性问题外,指令重排序也会导致可见性问题

相关文章:

  • 【C++代码】爬楼梯,不同路径,整数拆分,不同搜索树,动态规划--代码随想录
  • QT C++ AES字符串加密实现
  • 设计模式中继承和组合的总结
  • MyString字符串类
  • TOGAF(企业架构)
  • VSCode snippets
  • Android11系统桌面隐藏指定APP图标
  • nginx请求时找路径问题
  • NetSuite数据备份办法
  • Day 11 python学习笔记
  • Linux系统下配置王爽汇编语言环境
  • SQL注入原理及思路(mysql)
  • 【ChatGPT系列】ChatGPT:创新工具还是失业威胁?
  • 导入Embassy库进行爬虫
  • 上海高考英语科目命题趋势和备考建议,附1990-2023真题解析
  • 【笔记】你不知道的JS读书笔记——Promise
  • Android优雅地处理按钮重复点击
  • CSS 专业技巧
  • ES6 ...操作符
  • es6(二):字符串的扩展
  • input实现文字超出省略号功能
  • Javascript Math对象和Date对象常用方法详解
  • java概述
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • markdown编辑器简评
  • SQL 难点解决:记录的引用
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • underscore源码剖析之整体架构
  • Yii源码解读-服务定位器(Service Locator)
  • 对超线程几个不同角度的解释
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 经典排序算法及其 Java 实现
  • 聊聊redis的数据结构的应用
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 使用 QuickBI 搭建酷炫可视化分析
  • 使用API自动生成工具优化前端工作流
  • 手写一个CommonJS打包工具(一)
  • 一个SAP顾问在美国的这些年
  • 一个完整Java Web项目背后的密码
  • 最简单的无缝轮播
  • const的用法,特别是用在函数前面与后面的区别
  • 仓管云——企业云erp功能有哪些?
  • 第二十章:异步和文件I/O.(二十三)
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • (02)Hive SQL编译成MapReduce任务的过程
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (12)目标检测_SSD基于pytorch搭建代码
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (二)PySpark3:SparkSQL编程
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • *p++,*(p++),*++p,(*p)++区别?
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?