多线程中锁的升级

synchronized锁升级原理:在锁对象的对象头里面有一个threadid字段,在第一次访问的时候threadid为空,jvm 让其持有偏向锁,并将threadid 设置为其线程id,再次进入的时候会先判断threadid是否与其线程id一致,如果一致则可以直接使用此对象,如果不一致,则升级偏向锁为轻量级锁,通过自旋循环一定次数来获取锁,执行一定次数之后,如果还没有正常获取到要使用的对象,此时就会把锁从轻量级升级为重量级锁,此过程就构成了synchronized 锁的升级。

锁的升级的目的

锁升级是为了减低了锁带来的性能消耗。在Java 6之后优化 synchronized的实现方式,使用了偏向锁升级为轻量级锁再升级到重量级锁的方式,从而减低了锁带来的性能消耗。

多线程中锁的降级

我注意到有的观点认为Java不会进行锁降级。实际上据我所知,锁降级确实是会发生的。

具体的触发时机:在全局安全点(safepoint)中,执行清理任务的时候会触发尝试降级锁
当锁降级时,主要进行了以下操作:

  • 恢复锁对象的markword对象头;
  • 重置ObjectMonitor,然后将该ObjectMonitor放入全局空闲列表,等待后续使用。

Synchronized锁升级、降级相关推荐

  1. synchronized锁升级过程及其实现原理

    本文链接:https://blog.csdn.net/wangyy130/article/details/106495180 问:为什么会有锁升级的过程呢 答:在java6以前synchronized ...

  2. synchronized 锁升级过程

    synchronized 锁升级过程就是其优化的核心:偏向锁 -> 轻量级锁 -> 重量级锁 class Test{private static final Object object = ...

  3. Synchronized 锁升级机制

    在 JDK 早期的版本,synchronized 锁的效率是非常低的,它的效率远低于 lock 锁,但是 sychronized 毕竟是 java 的关键词,它不应该就此淘汰.所以在 JDK1.6 中 ...

  4. Synchronized锁升级:无锁-> 偏向锁 -> 轻量级锁 -> 重量级锁

    一. 概述 1. Synchronized锁升级的原因 用锁能够实现数据的安全性,但是会带来性能下降.无锁能够基于线程并行提升程序性能,但是会带来安全性下降. 2. Synchronized锁升级的过 ...

  5. 22-10-14 西安 spring循环依赖、对象内存布局、synchronized锁升级

    关于锁升级参考了周阳老师在b站的juc视频,阳哥讲的很好 尚硅谷2022版JUC并发编程(对标阿里P6-P7)_哔哩哔哩_bilibili spring循环依赖 1.循环依赖问题 什么是循环依赖 默认 ...

  6. synchronized锁升级_synchronized详解以及锁的膨胀升级过程

    点击上方"码之初"关注,···选择"设为星标" 与精品技术文章不期而遇 来源:www.cnblogs.com/cxiaocai/p/12189848.html ...

  7. synchronized锁升级过程详解

    32位: 64位: 无锁: 1001001110000101111101010101110 HashCode:1237514926 十进制:1237514926 二进制:0100100 1100001 ...

  8. synchronized锁升级之轻量级锁

    目录 一.什么是轻量级锁? 二.为什么引入轻量级锁? 三.轻量级锁的升级时机 四.轻量级锁的演示 五.轻量级锁的原理 六.轻量级锁升级为重量级锁的流程 七.轻量级锁的优缺点 一.什么是轻量级锁? 轻量 ...

  9. synchronized锁升级那点事

    synchronized的升级过程 引入JOL(Java Object Layout)来打印java对象头在内存中的字节码. <dependency><groupId>org. ...

最新文章

  1. Windows下删除Kafka中某个Group
  2. 2012年度IT博客大赛【星光评委】申请说明
  3. Linux后台运行打包Jar的方法
  4. k8s 集群居然可以图形化安装了?
  5. linux无缝升级的版本,最近一周发布新版本的Linux发行版 - 2020-01-03
  6. 让IT人早点下班?高效的vPro平台帮你忙
  7. android获取sd的大小,Android实现获取SD卡总容量,可用大小,机身内存总容量及可用大小的方法...
  8. ArrayList和LinkedList的插入删除性能差距到底有多大
  9. BZOJ 1933 Bookcase 书柜的尺寸
  10. [ 原创 ] 概念01--中国财政真相:25省负债 全国只有6省1市在赚钱
  11. YARN工作流程详解
  12. 学习OpenCV——计算邻接区域列表(build_adjoin)
  13. 高级程序员和普通程序员有哪些区别?
  14. 手把手教你申请计算机软件著作权(2)—— 生成代码文件身份证明
  15. 室内定位——UWB测距及定位原理
  16. 区块链 01(简化后的区块包括父区块哈希值、数据、时间戳、哈希值这四个字段,区块的哈希值由父区块哈希值、数据、时间戳、3个字段拼接通过 哈希算法计算而成)
  17. JavaScript中的垃圾回收和内存泄漏
  18. Element UI 多选搜索实现拼音匹配
  19. 钉钉页面跳转_钉钉微应用控制页面返回
  20. 2021年,我国的国际骨干网出口怎么样, 有多少海底电缆?

热门文章

  1. css属性flex:1代表什么
  2. .NETCore生成验证码
  3. 我觉得我还可以再抢救一下——0.999...=1的前生今世
  4. 8个免费有用值得收藏的网站
  5. 2021.5.9数仓之机器详情ODS EDS DM分层设计
  6. YBT 1356:计算(calc)
  7. c语言圈复杂度switch,C语言switch/case圈复杂度优化重构
  8. ABBYY Finereader 15安装教程
  9. 阿里云平台产品功能实战详解
  10. Vue3管理后台项目使用高德地图选点