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. ...
最新文章
- python3 上传文件到目标机器_再见Python 2.7,你好Python 3.7
- NYOJ - 78 圈水池 【凸包】
- 一步一步教你写带图片注释的淡入淡出插件(四)
- mysql基本表管理sql语句
- Eclipse调试Java的10个技巧
- 【硬件】存储的RAID技术详解
- php中的eof是什么意思,在C++中eof是什么意思?
- 养生秘诀呼吸吐纳真的可以养生嘛?
- SE 例题recap
- webpack serve 配置问题TypeError: Class constructor ServeCommand cannot be invoked without ‘new‘
- 软件测试面试101问(附答案)
- linux python2升级到python3(源码编译安装)
- 写给小白的 Asyncio 教程
- freesurfer recon-all命令
- java smtp.126.com_Java采用SMTP协议发送邮件 | 学步园
- RobotFramework(RF)常用函数库-内置库篇
- Python数据分析高薪实战第四天 构建国产电视剧评分数据集
- php 微盟,微盟开放授权并获取ACCESS_TOKEN方法(新版)
- AFNetworking的使用
- Java设计模式之建造者模式(精髓版)
热门文章
- java计算机毕业设计Vue框架龙猫宠物交易平台源码+mysql数据库+系统+lw文档+部署
- 社区公众号的解决方案,如何运营好一个社群?
- 改变ServU的端口号
- mysql ddl备份,MySQL系列-DDL语句
- 【护眼色设置】Adobe Acrobat DC / Notepad++ 背景颜色设青苹果绿
- 利用GPT-3 Fine-tunes训练专属语言模型
- OpenAI 官方api 阅读笔记
- 不谈程序,谈发展,推荐一些励志书,也许可以改变你的困境
- 【C++】哈希与哈希冲突
- 解决无法找到Microsoft.Office.Interop.Excel并将其分离的方法