章节目录

  • volatile的实现原理与应用

1.volatile的实现原理与应用

Java source code->Java class->JVM->汇编指令->cpu执行
java中使用的并发机制依赖于JVM实现和cpu指令。

1.1 volatile应用

volatile-保证可见性

volatile 是轻量级 synchronized,在多处理器并发中保证了共享变量的"可见性"。
可见性含义:
当一个线程修改共享变量时,另一个线程能立即读到这个修改的值。

volatile-执行成本低

volatile不会引起线程上下文的切换和调度。
使用合适,volatile的使用代价会比synchronized小。

volatile 如何保证可见性

class A{private volatile Singleton instance ;public A(){instance = new Singleton();}
}

转成汇编代码,如下:
movb, lock add1
上述对volatile共享变量instance进行写操作的时候会多出第二行汇编代码,Lock前缀的指令在多核处理器下会引发两件事情。

  • 将当前处理器缓存行的数据写回到系统内存(工作内存写入到主内存)
  • 这个写回操作,会使在其他cpu里缓存了该内存地址的数据无效。

注意:在多处理器下,为了保证各个处理器缓存是一致的,就会实现缓存一致性协议
缓存一致性协议

每个处理器通过嗅探在总线上传播的数据来对比检查自己缓存的值是否过期
了,当处理器发现自己缓存行对应的内存地址中的值被修改,就会将当前处理
器的缓存行设置为无效状态,当其他处理器对这个共享变量进行修改操作时,
会重新从系统内存中把数据都到处理器缓存行当中。

volatile两条实现原则

  • Lock前缀指令会引起处理器缓存回写到内存
1.锁总线+独占任何共享内存
2.缓存锁定+缓存一致性协议
  • 一个处理器的缓存回写到主内存会导致其他缓存此主内存共享变量的处理器缓存无效
每个处理器通过嗅探在总线上传播的数据来对比检查自己缓存的值是否过期
了,当处理器发现自己缓存行对应的内存地址中的值被修改,就会将当前处理
器的缓存行设置为无效状态,当其他处理器对这个共享变量进行修改操作时,
会重新从系统内存中把数据都到处理器缓存行当中。

Java并发机制底层实现原理-volatile相关推荐

  1. 深入学习Java多线程——并发机制底层实现原理

    2019独角兽企业重金招聘Python工程师标准>>> Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执 ...

  2. Java并发机制深究1-synchronized和volatile

    在多线程并发编程中,synchronized和volatile都是很重要的,volatile是轻量级的synchronized.在多处理器编程中保证共享变量的统一性. 1.volatile的使用和原理 ...

  3. Java并发机制的底层实现原理

    Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令.本章我们将 ...

  4. 《Java并发编程的艺术》一一第2章Java并发机制的底层实现原理

    第2章Java并发机制的底层实现原理 2.1 volatile的应用 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行, ...

  5. 《Java并发编程的艺术》:第2章 Java并发机制的底层实现原理

    前言 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节 码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和 CPU的指令. ...

  6. Java中HashMap底层实现原理

    Java面试绕不开的问题: Java中HashMap底层实现原理(JDK1.8)源码分析 这几天学习了HashMap的底层实现,但是发现好几个版本的,代码不一,而且看了Android包的HashMap ...

  7. Java HashMap的底层实现原理

    一.Java HashMap的底层实现原理(以jdk7为例) 1.HashMap map = new HashMap(); 在实例化以后,才在底层创建了一个长度为16的一维数组 Entry [] ta ...

  8. 深入探索Java反射机制:解析原理与应用

    深入探索Java反射机制:解析原理与应用

  9. java并发机制的底层实现原理(volatile,synchronized,原子操作)

    目录 volatile的应用 volatile的定义与实现原理 volatile的使用优化 synchronized的实现原理与应用 Java对象头 锁的升级与对比 偏向锁 轻量级锁 锁的优缺点对比 ...

最新文章

  1. 思科设置密码及一些基本操作
  2. 学python需要什么-想要学人工智能需要学些什么python的知识
  3. 【翻译】【CGWORLD】怪物猎人携带版3rd制作介绍
  4. Java学习规划及就业规划(本人大三)
  5. rem 之js代码获取font-size值(适合移动手机端)
  6. Java ObjectOutputStream writeLong()方法与示例
  7. 毕设日志——tensorboardX无法连接的问题
  8. 50 岁再次创业:我希望 20 年后还能解 Bug
  9. 漫谈 Clustering (4): Spectral Clustering
  10. 为心爱的人做一个超具创意的表白网页吧❤(告白气球)HTML+CSS+JavaScript
  11. 【微信自动续费】委托代扣接口常见问题QA
  12. 《深入理解Java虚拟机》笔记04之垃圾收集算法
  13. API接口安全设计方案(已实现)
  14. 【笑话】程序员和青蛙公主
  15. Jackson公司蛋白质印迹指南丨样品制备
  16. 手写数字识别--Android Studio 加载tensorflow模型
  17. pythonGUI(二)基本元素之二
  18. python添加文字水印中间旋转45度,Python添加pdf水印
  19. 关于系统复杂性的一句箴言
  20. css布局的基本思想,流行的CSS思想之——浅析OOCSS

热门文章

  1. Android5.0新特性-Material Design
  2. java抽象和接口的理解_Java接口实现与抽象类的区别理解 | 彬菌
  3. 如何将本地jar包上传到maven私服中
  4. python 旋转图像
  5. python IP地址无效化
  6. 错误:Subquery returns more than 1 row 表示子查询返回了多行数据
  7. Arrays常见用法
  8. python调用接口上传文件_python上传文件接口
  9. 通过python里面的pyautogui自动化控制鼠标和键盘操作
  10. Spring框架关于事务处理的API和使用步骤