Java并发机制底层实现原理-volatile
章节目录
- 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.缓存锁定+缓存一致性协议
- 一个处理器的缓存回写到主内存会导致其他缓存此主内存共享变量的处理器缓存无效
每个处理器通过嗅探在总线上传播的数据来对比检查自己缓存的值是否过期
了,当处理器发现自己缓存行对应的内存地址中的值被修改,就会将当前处理
器的缓存行设置为无效状态,当其他处理器对这个共享变量进行修改操作时,
会重新从系统内存中把数据都到处理器缓存行当中。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
【回放视频+PPT下载整理】编程语言系列讲座:深度学习JavaScript和React技术
编程语言系列讲座JavaScript篇,我们邀请了行业资深专家靖鑫和逸翾与大家一起学习最流行的编程语言,本次系列直播将对于JavaScript中的对象、函数和异步编程进行详细解读,并带领大家学习React技术栈,包括快速掌握组件化和搭建页面、Mobx状态管理框架和React Diff算法及新架构Fiber。 数十款阿里云产品限时折扣中,赶快点击这里,领券开始云上实践吧! 4月16日直播讲座 演讲嘉宾为阿里巴巴高级前端工程师逸翾,主讲内容包括JavaScript中的继承、函数式编程和单线程异步编程。 Javascript中的对象 视频链接:https://yq.aliyun.com/video/play/1421 PDF下载:https://yq.aliyun.com/download/2576 回顾文章:https://yq.aliyun.
-
下一篇
Python黑科技:50行代码运用Python+OpenCV实现人脸追踪
嗨,我最亲爱的伙计们,很高兴我们又见面了。 首先先感谢朋友们的关注。当然我更希望认识与计算机相关的领域的朋友咱们一起探讨交流。重点说一下,我是真人,不是那些扒文章的自媒体组织,大家可以相互交流的! 本篇文章我们来讲一下关于AI相关的人脸追踪,人脸识别相关的一些知识。当然本篇教程为(上)部分,讲一下利用python+opencv来实现人脸识别与追踪,明后天出(下)部分,用python来通过指纹对比实现人脸验证、人脸解锁(大家感兴趣的可以提前关注哦)。 这两节课呢,代码量都不是很多,鄙人尽量多注释点,便于大家理解。那我们就不多啰嗦废话了,直接上干货! OpenCV: opencv目前来讲是十分流行的视觉库,而且可以支持多语言。说到opencv就不得不说它的cascades分类器。 如果我们要判断一张图片是不是有一张脸,早期方式是通过成千上万的分类器去从头匹配到尾,这样看并没有什么什么毛病,但判断的图片多了呢?那可能需要猴年马月。opencv的cascades呢,就把这些用来判断人脸特征的容器划分成多块层层匹配,到一层不匹配就被丢弃。 这好比一群人去公司面试,公司第一个要求是只要男人,那一批...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- MySQL数据库在高并发下的优化方案
- SpringBoot2配置默认Tomcat设置,开启更多高级功能