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

【多线程面试题二十三】、 说说你对读写锁的了解volatile关键字有什么用?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。

面试官:【多线程面试题二十二】、 说说你对读写锁的了解

参考答案:

当一个变量被定义成volatile之后,它将具备两项特性:

  • 1、保证可见性

    • 当写一个volatile变量时,JMM会把该线程本地内存中的变量强制刷新到主内存中去,这个写会操作会导致其他线程中的volatile变量缓存无效。
  • 2、禁止指令重排

    • 使用volatile关键字修饰共享变量可以禁止指令重排序,volatile禁止指令重排序有一些规则:

    • 当程序执行到volatile变量的读操作或者写操作时,在其前面的操作的更改肯定全部已经进行,且结果已经对后面的操作可见,在其后面的操作肯定还没有进行;

    • 在进行指令优化时,不能将对volatile变量访问的语句放在其后面执行,也不能把volatile变量后面的语句放到其前面执行。

即执行到volatile变量时,其前面的所有语句都执行完,后面所有语句都未执行。且前面语句的结果对volatile变量及其后面语句可见。

注意,虽然volatile能够保证可见性,但它不能保证原子性。volatile变量在各个线程的工作内存中是不存在一致性问题的,但是Java里面的运算操作符并非原子操作,这导致volatile变量的运算在并发下一样是不安全的。

相关文章:

  • MFC 基础篇(一)
  • uniapp踩坑之项目:uniapp数字键盘组件—APP端
  • js原型链
  • CVF 在 TNEWS 数据集上测试
  • leetcode:13. 罗马数字转整数(python3解法)
  • 【Linux】:初识git || centos下安装git || 创建本地仓库 || 配置本地仓库 || 认识工作区/暂存区(索引)以及版本库
  • 5G创新突破 | 紫光展锐5G芯片全球首发R17 NR广播端到端业务演示
  • 为什么 conda 不能升级 python 到 3.12
  • python 按字段查询数据库
  • Kubernetes rancher、prometheus、ELK的安装
  • flink状态和检查点
  • Xcode15 framework ‘CoreAudioTypes‘ not found
  • OTP语音 NV040C芯片在智能闹钟的应用
  • Mac安装opencvJava踩坑
  • VS Code Counter统计代码量(vscode扩展工具)
  • [nginx文档翻译系列] 控制nginx
  • 【知识碎片】第三方登录弹窗效果
  • C++类中的特殊成员函数
  • CAP理论的例子讲解
  • JavaScript-Array类型
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • python3 使用 asyncio 代替线程
  • vue总结
  • 读懂package.json -- 依赖管理
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 硬币翻转问题,区间操作
  • Hibernate主键生成策略及选择
  • scrapy中间件源码分析及常用中间件大全
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #QT(TCP网络编程-服务端)
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (9)目标检测_SSD的原理
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (转)ORM
  • (转)为C# Windows服务添加安装程序
  • (状压dp)uva 10817 Headmaster's Headache
  • .net 程序发生了一个不可捕获的异常
  • .NET连接数据库方式
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .sdf和.msp文件读取
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • []常用AT命令解释()
  • [Android] Implementation vs API dependency
  • [Angular] 笔记 18:Angular Router
  • [BZOJ 4034][HAOI2015]T2 [树链剖分]
  • [BZOJ1060][ZJOI2007]时态同步 树形dp