由于CPU高速缓存的出现使得 如果多个cpu同时缓存了相同的共享数据时,可能存在可见性问题。也就是CPU0修改了自己本地缓存的值对于CPU1不可见。不可见导致的后果是CPU1后续在对该数据进行写入操作时,是使用的脏数据。使得数据最终的结果不可预测。

很多同学肯定希望想在代码里面去模拟一下可见性的问题,实际上,这种情况很难模拟。因为我们无法让某个线程指定某个特定CPU,这是系统底层的算法, JVM应该也是没法控制的。还有最重要的一点,就是你无法预测CPU缓存什么时候会把值传给主存,可能这个时间间隔非常短,短到你无法观察到。最后就是线程的执行的顺序问题,因为多线程你无法控制哪个线程的某句代码会在另一个线程的某句代码后面马上执行。

所以我们只能基于它的原理去了解这样一个存在的客观事实 了解到这里,大家应该会有一个疑问,刚刚不是说基于缓存一致性协议或者总线锁能够达到缓存一致性的要求吗?为什么还需要加volatile关键字?或者说为什么还会存在可见性问题呢?

初步认识Volatile-总结可见性的本质相关推荐

  1. Java并发编程(中下篇)从入门到深入 超详细笔记

    接上一篇博客笔记:Java并发编程(中上篇)从入门到深入 超详细笔记_未来很长,别只看眼前的博客-CSDN博客https://blog.csdn.net/weixin_53142722/article ...

  2. 初步认识Volatile-从硬件层面了解可见性的本质

    一台计算机中最核心的组件是CPU.内存.以及I/O设备.在整个计算机的发展历程中,除了CPU.内存以及I/O设备不断迭代升级来提升计算机处理性能之外,还有一个非常核心的矛盾点,就是这三者在处理速度的差 ...

  3. 分析Volatile的作用及底层实现原理,面试问一点都不慌!

    文章简介 分析volatile的作用以及底层实现原理,这也是大公司喜欢问的问题 内容导航 volatile的作用 什么是可见性 volatile源码分析 01.volatile的作用 在多线程中,vo ...

  4. 死磕Java并发:深入分析volatile的实现原理

    本文转载自公众号: Java技术驿站 通过前面一章,我们了解到synchronized是一个重量级的锁,虽然JVM对它做了很多优化. 而下面介绍的volatile则是轻量级的synchronized. ...

  5. FreeRTOS初步认识

    源:FreeRTOS初步认识 用了半天时间对FreeRTOS有了一个初步的认识,大概总结一下,其中混杂了系统实现和实际应用方面的问题. 现只是以应用为目的,实现方面待以后进一步研究. 1.FreeRT ...

  6. Java进阶:volatile使用详解

    概述 volatile是Java提供的轻量级的同步机制,保证了可见性,不保证原子性. 了解volatile工作机制,首先要对Java内存模型(JMM)有初步的认识: 每个线程创建时,JVM会为其创建一 ...

  7. 初步认识Volatile-CPU层面的内存屏障

    什么是内存屏障?从前面的内容基本能有一个初步的猜想,内存屏障就是将 store bufferes中的指令写入到内存,从而使得其他访问同一共享内存的线程的可见性. X86的memory barrier指 ...

  8. volatile 关键字是如何保证可见性的?

    我们可以使用[hsdis]这个工具,来查看前面演示的这段代码的汇编指令,具体的使用请查看使用说明文档 在运行的代码中,设置jvm参数如下 [-server -Xcomp -XX:+UnlockDiag ...

  9. Java并发编程-volatile关键字介绍

    前言 要学习好Java的多线程,就一定得对volatile关键字的作用机制了熟于胸.最近博主看了大量关于volatile的相关博客,对其有了一点初步的理解和认识,下面通过自己的话叙述整理一遍. 有什么 ...

最新文章

  1. for update引发的血案
  2. Android 中点击某个按钮实现 返回键 的功能
  3. colinux php,利用colinux 搭建linux开发环境
  4. 四阶混合累积量matlab_12m氢燃料电池城市客车电电混合动力系统设计方案
  5. OJ1076: 三位数求解(C语言)
  6. Centos7配置Samba服务实现与Windows文件共享
  7. 函数模板与函数的区别
  8. linux主引导修复工具,Boot-Repair/引导修复工具
  9. c语言 特征码思路来破植物大战僵尸
  10. 解决latex伪代码标题序号问题
  11. 新医改背景下,民营医院如何通过绩效变革支持高质量发展?
  12. oracle时分秒修改值_oracle优化(一) oracle数据库使用 TIMESTAMP(6)类型保存年月日时分秒...
  13. 使用谷歌浏览器查看ws消息
  14. 学校计算机统一编号,华中科技大学人员编号编码管理办法
  15. iptables日志记录访问记录
  16. Dota2 世界冠军被 AI 吊打,全程只推了两座塔
  17. PHP:ThinkPHP
  18. SpringBoot高级_与安全
  19. 给女朋友表白节日送给女朋友的网页(精美)
  20. 面试中的项目介绍怎么介绍?从哪些方面介绍?一文搞明白(大数据方向,其他方向可借鉴)

热门文章

  1. 模拟用户登陆Web应用
  2. HTML 4.01 event 事件
  3. web前端入门必知的10个技术
  4. LightOJ 1112 - Curious Robin Hood 树状数组
  5. impdp的一些实际问题解决方法
  6. poj 3517
  7. 【RPC】你应该知道的 RPC 原理
  8. 【大话数据结构算法】直接选择排序
  9. 大话设计模式—命令模式
  10. 网上商城—管理员增加商品