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

一文讲全volatile关键字

1. 背景与内存模型

  • ​缓存一致性问题​​:在多线程环境下,由于每个线程可能拥有自己的工作内存(如CPU高速缓存),对共享变量的修改可能不会立即被其他线程看到,导致数据不一致。
  • ​解决方案​​:硬件层面通过总线锁或缓存一致性协议(如MESI)解决,volatile在Java中提供了语言层面的支持。

2. 并发编程的三大问题

  • ​原子性​​:一个操作不可中断,要么全部完成,要么不执行(如赋值操作是原子的,但i++不是)。
  • ​可见性​​:一个线程修改共享变量后,其他线程能立即看到新值。
  • ​有序性​​:程序执行顺序按代码顺序执行(但指令重排序可能破坏有序性)。

3. volatile的作用

  • ​保证可见性​​:强制将修改的值立即写入主存,并使其他线程的缓存失效,确保读取最新值。
  • ​禁止指令重排序​​:通过内存屏障(lock前缀指令)确保操作顺序性,避免重排序引发的并发问题。

4. volatile的局限性

  • ​不保证原子性​​:例如volatile int i; i++不是原子操作(需结合synchronizedLockAtomicInteger)。
  • ​使用条件​​:对变量的写操作不依赖当前值(如状态标记量),且不参与其他变量的不变式。

5. 适用场景

  • ​状态标记量​​:如volatile boolean flag,控制线程执行流程。
  • public class Singleton {private volatile static Singleton instance;public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton(); // 避免重排序}}}return instance;}
    }
    ​双重检查锁(Double-Checked Locking)​​:用于单例模式,避免指令重排序导致未初始化对象被访问。

6. 实现原理

通过JVM的lock指令实现内存屏障,功能包括:

  • 阻止指令重排序跨越屏障;
  • 强制缓存修改立即写入主存;
  • 使其他CPU的缓存行无效。

关键对比

  • volatilevs synchronized​:volatile仅保证可见性和有序性,不保证原子性;synchronized能保证三者,但性能开销较大。
  • ​​​​​​​​替代方案​​:原子类(如AtomicInteger)通过CAS操作保证原子性。

总之,volatile是轻量级的同步机制,适用于不依赖当前值的状态标记或禁止重排序的场景,但需谨慎评估其原子性需求。

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

相关文章:

  • 西安高校网站建设保定手机网站制作
  • 对称加密与非对称加密
  • Swift添加字体到项目中
  • 大专建筑工程技术专业职业发展指南
  • 免费免费网站模板企业调查问卷
  • 考研408--day2--组成原理--进制定点数符号拓展
  • 硬件工程师-基础知识电阻(一)
  • 13-- System Coherency Interface
  • 用代码示例说明如何通过线程池实现Java多线程编程
  • 网易做网站企业怎么在网站上做宣传
  • 响应式网站制作工具搜了网
  • [Android] 人事考试网v1.0.4
  • Python 面向对象
  • 技术解析:佐航BYQ3313S手持式三相直阻测试仪如何重塑多场景变压器检测价值
  • RuoyiApp 在vuex,state存储nickname vue2
  • 常见的网站类型有哪些wordpress收费会员
  • 建设银行成都开发中心网站saas云建站
  • 视频网站如何做爱奇艺做任务领vip网站
  • 用python可视化分析上海教育中考新政
  • MySQL的UPPER函数介绍
  • 自己搭建一个网站我做钓鱼网站自首了
  • 专用主机方式建设网站用discuz做的大网站
  • [特殊字符] Java/Vue 实现体育比分直播系统,支持多端实时更新
  • 沈阳哪个网站建设公司好重庆网站制作一般多少钱
  • 用vscode连接远端ubuntu无法git push,vscode无法连接centos
  • 商业门户网站怎么运营淘宝关键词怎么选取
  • oj 素数个数 难
  • 全球前10网站开发语言百度做网站需要多少钱
  • Affinity三大专业工具整合免费开放
  • ZSAR配置PDUR模块