锁升级顺序

  1. 偏向锁
  2. 轻量级锁
  3. 自旋锁
  4. 重量级锁

偏向锁

如果一个线程获得了锁,再次请求的时候就不需要再去获取锁。如果发现有其他线程来获取这个锁,就升级为轻量级锁。

理论基础:

在大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,因此为了减少同一线程获取锁的代价而引入偏向锁。

轻量级锁

通过使用CAS来获取锁,如果CAS失败就升级为自旋锁。

相关链接:JAVA轻量级锁简介

理论基础

对绝大部分的锁,在整个同步周期内都不存在竞争

自旋锁

线程去获取锁的时候,默认认为锁的使用方会很快释放锁,所以就一直循环获取这个锁(自旋),一般不会获取太久,可能是50个或者100个循环。如果自旋获取锁失败,就自动升级为重量级锁。

理论基础

在大多数情况下,线程持有锁的时间都不会太长,线程的挂起和恢复本身也是一种损耗,在这种情况下频繁挂机和恢复就显得不值得,因此就用自旋的方式来避免频繁地线程调度。

重量级锁

线程获取锁的时候如果发现已经被占用,那么这个线程就挂起,一直到锁的使用方使用结束之后才会唤醒这个线程。

Java Synchronized 锁升级简介相关推荐

  1. Synchronized 锁升级机制

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

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

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

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

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

  4. Synchronized锁升级、降级

    多线程中锁的升级 synchronized锁升级原理:在锁对象的对象头里面有一个threadid字段,在第一次访问的时候threadid为空,jvm 让其持有偏向锁,并将threadid 设置为其线程 ...

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

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

  6. synchronized 锁升级过程

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

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

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

  8. synchronized锁升级那点事

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

  9. Synchronized锁升级底层原理

    思考问题 首先请您思考下面的问题: Synchronized锁同步机制性能不好嘛? 一个对象天生对应一个monitor锁吗? 为什么说synchronized是非公平锁? synchronized字节 ...

最新文章

  1. RT-thread内核之空闲线程
  2. WEUI picker组件无法js动态改变选项
  3. 【企业管理】高效会议关注点
  4. ArrayAndString(数组和字符串)
  5. 天线巴伦制作和原理_10米段的春天 | 用自制环型天线+改装SDR接收器27MHz采访实录...
  6. ROS入门笔记(十三):分布式通信
  7. macOS Command - xcode-select
  8. 基于Pytorch实现自建数据库的深度神经网络模型案例
  9. UE4 初学者内容包介绍
  10. 一个项目的经验教训:关于打乱和拆分数据
  11. 大众点评cat接入记录
  12. 最大流为什么会等于最小割
  13. 最小生成树(普里姆算法)
  14. 办公系统服务器搭建,搭建云桌面办公服务器
  15. 中职学校计算机专业的论文,浅谈中职计算机专业教学改革思考论文
  16. 【DirectX 12】在Win10 10074上开启DirectX 12的调试功能
  17. Unity3D-LOL部分效果生成方法---cd效果
  18. SMBIOS介绍(1):概述
  19. vue上传文件,实现单选 ,实现递归多选
  20. 新闻编辑室第三季/全集The Newsroom迅雷下载

热门文章

  1. 英雄联盟手游国际服安卓下载教程
  2. 鸿蒙系统首次使用,安卓系统被迫停供华为!华为将背水一战,鸿蒙系统首次用在手机上...
  3. pix2pix简要笔记
  4. 离散数学:连通分支数
  5. java 一年中的第几天_输入日期判断是这一年的第几天(JAVA)
  6. 信呼协同办公系统在线办公管理系
  7. 解读:紫外杀菌棒如何申请EPA 认证
  8. mysql中间件DDRS_深入解析中间件之-Canal
  9. Riemann度量习题
  10. ios 打印c语言数组,第07天C语言(07):数组练习3