Synchronized锁升级、降级
多线程中锁的升级
synchronized锁升级原理:在锁对象的对象头里面有一个threadid字段,在第一次访问的时候threadid为空,jvm 让其持有偏向锁,并将threadid 设置为其线程id,再次进入的时候会先判断threadid是否与其线程id一致,如果一致则可以直接使用此对象,如果不一致,则升级偏向锁为轻量级锁,通过自旋循环一定次数来获取锁,执行一定次数之后,如果还没有正常获取到要使用的对象,此时就会把锁从轻量级升级为重量级锁,此过程就构成了synchronized 锁的升级。
锁的升级的目的
锁升级是为了减低了锁带来的性能消耗。在Java 6之后优化 synchronized的实现方式,使用了偏向锁升级为轻量级锁再升级到重量级锁的方式,从而减低了锁带来的性能消耗。
多线程中锁的降级
我注意到有的观点认为Java不会进行锁降级。实际上据我所知,锁降级确实是会发生的。
具体的触发时机:在全局安全点(safepoint)中,执行清理任务的时候会触发尝试降级锁。
当锁降级时,主要进行了以下操作:
- 恢复锁对象的markword对象头;
- 重置ObjectMonitor,然后将该ObjectMonitor放入全局空闲列表,等待后续使用。
Synchronized锁升级、降级相关推荐
- synchronized锁升级过程及其实现原理
本文链接:https://blog.csdn.net/wangyy130/article/details/106495180 问:为什么会有锁升级的过程呢 答:在java6以前synchronized ...
- synchronized 锁升级过程
synchronized 锁升级过程就是其优化的核心:偏向锁 -> 轻量级锁 -> 重量级锁 class Test{private static final Object object = ...
- Synchronized 锁升级机制
在 JDK 早期的版本,synchronized 锁的效率是非常低的,它的效率远低于 lock 锁,但是 sychronized 毕竟是 java 的关键词,它不应该就此淘汰.所以在 JDK1.6 中 ...
- Synchronized锁升级:无锁-> 偏向锁 -> 轻量级锁 -> 重量级锁
一. 概述 1. Synchronized锁升级的原因 用锁能够实现数据的安全性,但是会带来性能下降.无锁能够基于线程并行提升程序性能,但是会带来安全性下降. 2. Synchronized锁升级的过 ...
- 22-10-14 西安 spring循环依赖、对象内存布局、synchronized锁升级
关于锁升级参考了周阳老师在b站的juc视频,阳哥讲的很好 尚硅谷2022版JUC并发编程(对标阿里P6-P7)_哔哩哔哩_bilibili spring循环依赖 1.循环依赖问题 什么是循环依赖 默认 ...
- synchronized锁升级_synchronized详解以及锁的膨胀升级过程
点击上方"码之初"关注,···选择"设为星标" 与精品技术文章不期而遇 来源:www.cnblogs.com/cxiaocai/p/12189848.html ...
- synchronized锁升级过程详解
32位: 64位: 无锁: 1001001110000101111101010101110 HashCode:1237514926 十进制:1237514926 二进制:0100100 1100001 ...
- synchronized锁升级之轻量级锁
目录 一.什么是轻量级锁? 二.为什么引入轻量级锁? 三.轻量级锁的升级时机 四.轻量级锁的演示 五.轻量级锁的原理 六.轻量级锁升级为重量级锁的流程 七.轻量级锁的优缺点 一.什么是轻量级锁? 轻量 ...
- synchronized锁升级那点事
synchronized的升级过程 引入JOL(Java Object Layout)来打印java对象头在内存中的字节码. <dependency><groupId>org. ...
最新文章
- Windows下删除Kafka中某个Group
- 2012年度IT博客大赛【星光评委】申请说明
- Linux后台运行打包Jar的方法
- k8s 集群居然可以图形化安装了?
- linux无缝升级的版本,最近一周发布新版本的Linux发行版 - 2020-01-03
- 让IT人早点下班?高效的vPro平台帮你忙
- android获取sd的大小,Android实现获取SD卡总容量,可用大小,机身内存总容量及可用大小的方法...
- ArrayList和LinkedList的插入删除性能差距到底有多大
- BZOJ 1933 Bookcase 书柜的尺寸
- [ 原创 ] 概念01--中国财政真相:25省负债 全国只有6省1市在赚钱
- YARN工作流程详解
- 学习OpenCV——计算邻接区域列表(build_adjoin)
- 高级程序员和普通程序员有哪些区别?
- 手把手教你申请计算机软件著作权(2)—— 生成代码文件身份证明
- 室内定位——UWB测距及定位原理
- 区块链 01(简化后的区块包括父区块哈希值、数据、时间戳、哈希值这四个字段,区块的哈希值由父区块哈希值、数据、时间戳、3个字段拼接通过 哈希算法计算而成)
- JavaScript中的垃圾回收和内存泄漏
- Element UI 多选搜索实现拼音匹配
- 钉钉页面跳转_钉钉微应用控制页面返回
- 2021年,我国的国际骨干网出口怎么样, 有多少海底电缆?