2019独角兽企业重金招聘Python工程师标准>>>

volatile

java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁更加方便。如果一个字段被声明成volatile,java线程内存模型确保所有线程看到这个变量的值是一致的。

这个变量用够很久,一直都没有深入研究过,虽然说知道主要是用于线程内变量共享,但却不知所以然,正好看到一个博文,感觉写的很nice,就摘抄了其中一些,补了一个个人理解的图

原文链接: 聊聊并发(一)深入分析Volatile的实现原理

实现原理

处理器为了提高处理速度,不直接和内存进行通讯,而是先将系统内存的数据读到内部缓存(L1,L2或其他)后再进行操作,但操作完之后不知道何时会写到内存,如果对声明了Volatile变量进行写操作,JVM就会向处理器发送一条Lock前缀的指令,将这个变量所在缓存行的数据写回到系统内存。但是就算写回到内存,如果其他处理器缓存的值还是旧的,再执行计算操作就会有问题,所以在多处理器下,为了保证各个处理器的缓存是一致的,就会实现缓存一致性协议,每个处理器通过嗅探在总线上传播的数据来检查自己缓存的值是不是过期了,当处理器发现自己缓存行对应的内存地址被修改,就会将当前处理器的缓存行设置成无效状态,当处理器要对这个数据进行修改操作的时候,会强制重新从系统内存里把数据读到处理器缓存里 用一个图简单的说明上面的过程

图画的一般般,简单说一下

  1. cpu与内部缓存进行交互
  2. volatile生命的变量,操作完之后写入内存(data -> data' 同时写入内存)
  3. 其他cpu缓存嗅探总线变动,并设置自己的data无效,使用时,从内存中获取

转载于:https://my.oschina.net/u/566591/blog/886795

【转】Volatile 实现原理相关推荐

  1. Java volatile关键字原理解剖

    Java volatile关键字原理解剖 文章目录 Java volatile关键字原理解剖 参考文章 前置知识 CPU缓存模型 CPU缓存行 并发编程基本概念 Java锁概念 volatile关键字 ...

  2. Java 多线程 —— 深入理解 volatile 的原理以及应用

    转载自  Java 多线程 -- 深入理解 volatile 的原理以及应用 推荐阅读:<java 多线程-线程怎么来的> 这一篇主要讲解一下volatile的原理以及应用,想必看完这一篇 ...

  3. 并发之volatile底层原理

    15.深入分析Volatile的实现原理 14.java多线程编程底层原理剖析以及volatile原理 13.Java中Volatile底层原理与应用 12.Java多线程-java.util.con ...

  4. volatile实现原理

    先Mark,后续完成 https://segmentfault.com/a/1190000017255405 http://ifeve.com/volatile/ http://cmsblogs.co ...

  5. 【你好面试官】008 Java内存模型指volatile底层原理详解、多处理器原子操作实现原理

    微信公众号:你好面试官 这里没有碎片化的知识,只有完整的知识体系. 专注于系统全面的知识点讲解,面试题目解析; 如果你觉得文章对你有帮助,欢迎关注.分享.赞赏. ###前言 二蛋几天没有收到面试通知, ...

  6. volatile关键字原理

    1.Volatile关键字的作用 可见性(visibility) 有序性(禁止指令重排) 不具备原子性 2.Volatile可见性实现原理 volatile是采用"内存屏障"来实现 ...

  7. cpu缓冲区大小怎么设置_JAVA高薪面试必备知识点Volatile底层原理探究CPU在作怪

    基础知识回顾 还是那句话,无论语言再怎么牛,其都是对底层计算机指令的封装. 计算机CPU执行指令的时候是非常快的,如果每执行一个指令都从内存中取数据的话,那会非常慢,严重影响CPU的执行速度,所以每个 ...

  8. volatile的原理和实现机制

    volatile到底如何保证可见性和禁止指令重排序的. "观察加入volatile关键字和没有加入volatile关键字时所生成的汇编代码发现,加入volatile关键字时,会多出一个loc ...

  9. Java并发编程,3分分钟深入分析volatile的实现原理

    volatile原理 volatile简介 Java内存模型告诉我们,各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理. 线程在工作内存进行操作后何时会写到 ...

  10. 就是要你懂 Java 中 volatile 关键字实现原理

    前言 我们知道volatile关键字的作用是保证变量在多线程之间的可见性,它是java.util.concurrent包的核心,没有volatile就没有这么多的并发类给我们使用. 本文详细解读一下v ...

最新文章

  1. 大写的服!用耳朵也能写代码?盲人程序员自学编程成为全栈工程师
  2. centos linux编译c,紧急提醒!Linux是如何编译C语言程序文件的?CentOS 8的gcc使用方法介绍...
  3. 连接maven_Maven系列——超简单入门级教程
  4. webrtc服务器janus echotest学习
  5. c# 程序员学习android(2)登陆界面
  6. MATLAB求前N个数的阶乘和(通俗易懂)
  7. chm打不开怎么办?
  8. python 程序员待遇_python程序员待遇如何
  9. Mysql开启局域网连接
  10. php swool 携程,EasySwoole-延迟队列-取消订单
  11. Unity3D中Quaternion.Euler方法解析
  12. 栈和队列的基本操作(栈和队列的区别)
  13. yolo3训练人脸检测模型
  14. Windows 无法连接到打印机,操作失败,错误为:0x00000bcb
  15. mpc5125 uboot 阅读笔记
  16. 查看loam的三维点云地图
  17. 【2021-07-23】JS逆向之某乎x_zes_96
  18. nrf52832 sdk15.2.0 dfu升级攻略
  19. 计算机网络-计算机网络的定义及分类
  20. 佛系投资---高股息策略

热门文章

  1. Python使用matplotlib可视化模拟烧烤摊每月营业额折线图
  2. jquery html 动态添加元素绑定事件
  3. oracle11gr2克隆安装,克隆安装Oracle 11G HOME
  4. 编程基本功:带着本子却不记录,你以为听懂了记住了,不可能的
  5. LINUX SHELL中大小写转换及注意事项
  6. OpenCV尽量不要打开CUDA参数编译,否则太慢了
  7. 在白宫,郎朗为什么选择了《我的祖国》
  8. 办公软件在多屏宽屏上的应用设想
  9. 谈谈以前那位研发总监错在哪里
  10. python语言通过import_python语言的引入(import)机制简述