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

【八股文】volatile关键字的底层原理是什么

volatile只能保证可见性和有序性

volatile如何保证可见性

当对volatile变量进行写操作的时候,JVM会向处理器发送一条lock前缀的命令,将这个缓存中的变量会写到系统内存中。

所以,如果一个变量被volatile所修饰,每次数据变化之后,其值都会被强制刷入主存。而其他处理器由于遵守缓存一致性协议,也会把这个变量的值从主存加载到自己的缓存中。这就保证了volatile修饰的值在多个缓存中是可见的。


什么是缓存一致性协议

 

由于CPU和主存的处理速度上存在一定差别,为了匹配这种差距,会在CPU和主存之间增加多层高速缓存(L1\L2\L3), 再加上多核计算机有多个CPU,所以就会出现多套缓存之间数据不一致的现象。

缓存一致性(MESI)的核心思想:

当CPU写数据时,如果发现操作的变量是共享变量,即在其他CPU中也存在该变量的副本,会发出信号通知其他CPU将该变量的缓存置为无效状态,因此其他CPU需要读取这个变量时,只能从内存中重新读取。

volatile如何保证有序性

普通的变量仅仅会保证在该方法的执行过程中所依赖的赋值结果的地方能获得正确的结果,而不能保证变量的赋值操作的顺序和代码顺序一致

volatile通过内存屏障来禁止指令重排,保证了代码严格按照编写的顺序执行,这样就保证了有序性。

相关文章:

  • 实现搜索功能:第一部分
  • 穿越是时空之门(java)
  • Ubuntu安装TensorFlow 2.13-GPU版全流程指南(anaconda)
  • golang中的接口
  • 【Java进阶学习 第九篇】常用API(Array、冒泡选择排序、二分查找、正则表达式)
  • 【C++进阶】指针:从基础到实践
  • Leetcode Hot 100 79.单词搜索
  • 【spring对bean Singleton和Prototype的管理流程】
  • 英伟达GTC 2025大会产品全景剖析与未来路线深度洞察分析
  • 小程序开发中的安全问题及防护措施
  • 蓝桥与力扣刷题(蓝桥 组队)
  • E1-相亲派对(组合)
  • 【AI News | 20250319】每日AI进展
  • @Resource和@Autowire
  • Java 中 LinkedList 的底层数据结构及相关分析
  • 【源码阅读】多个函数抽象为类(实现各种类型文件转为PDF)
  • UE4学习笔记 FPS游戏制作6 添加枪口特效
  • 详细解析GetOpenFileName()
  • Vue3 核心特性解析:Suspense 与 Teleport 原理深度剖析
  • 区块链技术驱动金融第一章 —— 走进区块链的基石:密码学与加密货币
  • 黑龙江省政府副秘书长许振宇,拟任正厅级领导
  • 四川甘孜炉霍县觉日寺管委会主任呷玛降泽被查
  • 国家卫生健康委通报关于肖某引发舆情事件调查处置进展情况
  • 美将解除对叙利亚制裁,外交部:中方一贯反对非法单边制裁
  • 缅甸内观冥想的历史漂流:从“人民鸦片”到东方灵修
  • 鸿海下调全年营收展望:AI服务器业务强劲,预计今年营收增超50%