多线程中锁的升级

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. python3 上传文件到目标机器_再见Python 2.7,你好Python 3.7
  2. NYOJ - 78 圈水池 【凸包】
  3. 一步一步教你写带图片注释的淡入淡出插件(四)
  4. mysql基本表管理sql语句
  5. Eclipse调试Java的10个技巧
  6. 【硬件】存储的RAID技术详解
  7. php中的eof是什么意思,在C++中eof是什么意思?
  8. 养生秘诀呼吸吐纳真的可以养生嘛?
  9. SE 例题recap
  10. webpack serve 配置问题TypeError: Class constructor ServeCommand cannot be invoked without ‘new‘
  11. 软件测试面试101问(附答案)
  12. linux python2升级到python3(源码编译安装)
  13. 写给小白的 Asyncio 教程
  14. freesurfer recon-all命令
  15. java smtp.126.com_Java采用SMTP协议发送邮件 | 学步园
  16. RobotFramework(RF)常用函数库-内置库篇
  17. Python数据分析高薪实战第四天 构建国产电视剧评分数据集
  18. php 微盟,微盟开放授权并获取ACCESS_TOKEN方法(新版)
  19. AFNetworking的使用
  20. Java设计模式之建造者模式(精髓版)

热门文章

  1. java计算机毕业设计Vue框架龙猫宠物交易平台源码+mysql数据库+系统+lw文档+部署
  2. 社区公众号的解决方案,如何运营好一个社群?
  3. 改变ServU的端口号
  4. mysql ddl备份,MySQL系列-DDL语句
  5. 【护眼色设置】Adobe Acrobat DC / Notepad++ 背景颜色设青苹果绿
  6. 利用GPT-3 Fine-tunes训练专属语言模型
  7. OpenAI 官方api 阅读笔记
  8. 不谈程序,谈发展,推荐一些励志书,也许可以改变你的困境
  9. 【C++】哈希与哈希冲突
  10. 解决无法找到Microsoft.Office.Interop.Excel并将其分离的方法