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

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

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

volatile如何保证可见性

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

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


什么是缓存一致性协议

 

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

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

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

volatile如何保证有序性

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

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

http://www.dtcms.com/a/77379.html

相关文章:

  • 实现搜索功能:第一部分
  • 穿越是时空之门(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 原理深度剖析
  • 区块链技术驱动金融第一章 —— 走进区块链的基石:密码学与加密货币
  • 性能测试过程实时监控分析
  • 虚幻基础:动作系统3
  • 基于Arduino控制的温室蔬菜园环境监控系统(论文+源码)
  • python-56-基于Vue和Flask进行前后端分离的项目开发示例实战
  • FPGA学习(二)——基于DE2-115开发板的LED流水灯设计
  • 构建下一代AI Agent:自动化开发与行业落地全解析
  • SpringBoot3+Vue3实战(Vue3快速开发登录注册页面并对接后端接口)(4)
  • <table>内有两行<tr>,第一行设定高度为60,剩余第二行,和右侧元素高度补齐。
  • Linux 锁、线程同步
  • Elasticsearch text字段检索方法