图解volatile 工作原理

volatile工作流程.jpg
  1. Cpu2 读取(read)到主内存中的变量v=0,并将其载入(load)工作内存中存为变量副本,线程2执行引擎使用(use)该变量副本,此时通过总线嗅探机制来监听主内存中v的变化。
  2. Cpu1 读取(read)到主内存中的变量v=0,并将其载入(load)工作内存中存为变量副本,线程1执行引擎使用(use)该变量副本,然后赋值(assign)v=1
  3. 由于变量v加了volatile关键字修饰,会在存储(store)之前加锁(lock),然后通过总线,将变量v=1写入主内存,解除锁定。
  4. 由于v的值发生了改变,并且通过了消息总线,Cpu2 通过总线嗅探机制发现v的值改变了,就会将 Cpu2 工作内存中的变量v=0置为无效状态,当使用(use)该变量时,发现没有这个值,就会冲新区主内存中读取数据,此时读取到的数据就是v=1
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第6章类文件结构 6.1 概述 6.2 无关性基石 6.3 Class类文件的结构 java虚拟机不和包括java...
    kennethan阅读 991评论 0 2
  • 缓存一致性问题 内存模型描述的是程序中各变量(实例域、静态域和数组元素)之间的关系,以及计算机系统将变量存...
    tracy_668阅读 1,074评论 0 3
  • JMM简介 Java的内存模型JMM(Java MemoryModel)JMM主要是为了规定了线程和内存之间的一些...
    团长plus阅读 1,300评论 0 2
  • 除了充分利用计算机处理器的能力外,一个服务端同时对多个客户端提供服务则是另一个更具体的并发应用场景。衡量一个服务性...
    胡二囧阅读 1,399评论 0 12
  • 目录 上一篇 雪菲儿问江辰对老六做了什么手脚。 “我的手段,就是这个!”说着,江辰从兜里掏出了一个窃听器。 “哟,...
    刘白月阅读 684评论 0 1