synchronized与volatile
synchronized实现过程:
1.Java代码:synchronized
2.字节码层级:monitorenter,monitorexit
3.执行过程中自动升级(偏向->自旋->重量级锁)
4.cpu汇编层级:lock comxchg
上图为双核cpu的内部构造,两个核共享一个三级缓存
超线程:一个ALU对应多个PC,一个核里面有两个pc,线程切换时不用存之前线程的数据,
直接两个pc记录运行到哪了,切换节约时间。
从主存读数据的时候,按块读(局部性原理)
这个块叫cache line(缓存行),一行数据64字节
MESI Cache一致性协议:
modified修改,exclusive独占,shared共享,invalid
Intel cpu是mesi缓存一致性协议,其他的cpu不一定
volatile怎么实现指令重排序?
1.volatile
2.字节码层级:ACC_VOLATILE
3.JVM层级:JVM的内存屏障
屏障两边的指令不可以重排!保障有序!
4.hotspotspot实现
synchronized与volatile相关推荐
- Java中的synchronized与volatile关键字
原文出处:http://hukai.me/android-training-course-in-chinese/performance/smp/index.html Java中的"synch ...
- 内存可见性和原子性:Synchronized和Volatile的比较
Java多线程之内存可见性和原子性:Synchronized和Volatile的比较 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article ...
- java map集合 事务控制_对象回收过程?线程池执行过程? map原理?集合类关系?synchronized 和 volatile ? 同一个类的方法事务传播控制还有作用吗?java 锁...
1. 对象回收过程? 可达性分析算法: 如果一个对象从 GC Roots 不可达时,则证明此对象不可用. 通过一系列称为GC ROOTS的对象作为起点,从这些起点往下搜索,搜索走过的路径 称为引用链 ...
- java中二进制怎么说_面试常用:说清楚Java中synchronized和volatile的区别
回顾一下两个关键字:synchronized和volatile 1.Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized.v ...
- Java基础学习总结(154)——Synchronized与Volatile、Synchronized与ReentrantLock概念及区别
一.Synchronized与Volatile的区别 首先需要理解线程安全的两个方面:执行控制和内存可见.执行控制的目的是控制代码执行(顺序)及是否可以并发执行.内存可见控制的是线程执行结果在内存中对 ...
- Java并发(四)——synchronized、volatile
文章目录 synchronized.volatile 1 Java内存模型JMM 2 伪共享 3 指令重排 4 synchronized 5 volatile 6 synchronized和Lock ...
- 【腾讯阿里最全面试题】介绍下Synchronized、Volatile、CAS、AQS,以及各自的使用场景
[腾讯阿里最全面试题]介绍下Synchronized.Volatile.CAS.AQS,以及各自的使用场景(文章较长,建议收藏观看) 相关视频讲解: 面试中出现概念最高的技术-原来就是这个锁 后台开发 ...
- Java 并发编程_详解 synchronized 和 volatile
文章目录 1. synchronized 的应用 1.1 基础知识 1.2 synchronized 语法 2. Monitor概念 3. Synchronized原理进阶 3.1 对象头格式 3.2 ...
- day 23-24 面试题:synchronized和volatile的区别;final,finally,finalize区别
面试题: 1. synchronized和volatile的区别 2. final,finally,finalize区别 1. synchronized和volatile的区别 1.1 JVM内存模型 ...
- 既生synchronized,何生volatile (synchronized与volatile的区别)
既生synchronized,何生volatile (synchronized与volatile的区别) 我们知道,synchronized和volatile两个关键字是Java并发编程中经常用到的两 ...
最新文章
- XPath学习:轴(13)——namespace
- GetSafeHdc( )
- SQL SERVER数据库中 是否可以对视图进行修改删除
- Java提高学习之Object(3)
- 信号与线性系统分析_线性系统与采样定理
- Linux 线程如何实现同步与互斥
- 【VMC实验室】在QCloud上创建您的SQL Cluster(5)
- String引起的OutOfMemory异常 + 如何计算C#对象所占内存的大小
- div模拟textarea在ios下不兼容的问题解决
- 安卓自定义相机拍照功能全解(不调用系统相机)
- 常见的弱口令字典1000~一石三鸟
- 基于easyx低配版flappybird
- 差异基因p为0_RNAseq数据分析文献22差异基因与临床数据相关性分析
- 通过阅读饥荒代码理解树人机制
- 加州房价模型(住房价格中位数)
- java referencequeue,Reference 、ReferenceQueue 详解
- 60个平移过渡预设PR合集
- 助你深刻理解——最长公共子串、最长公共子序列(应该是全网数一数二的比较全面的总结了)
- 积分商城搭建前的5个关键准备工作?
- PyQt5 QThread
热门文章
- LeetCode 280. 摆动排序
- MySQL 增加、更新、删除
- LeetCode 1379. 找出克隆二叉树中的相同节点(二叉树遍历)
- LeetCode 219. 存在重复元素 II(哈希)
- LeetCode 36. 有效的数独(哈希)
- 数据结构--栈--浏览器前进后退应用
- 漂亮的html页面源码_爬虫数据分析之html
- 判断深度学习模型的稳定性_全自动搭建定制化深度学习模型
- 文本分类问题不需要ResNet?小夕解析DPCNN设计原理(下)
- 论文浅尝 - ACL2020 | 利用常识知识图对会话流进行显式建模