1. 首先获取锁 对象的Markword,判断是否处于可偏向状态。(biased_lock=1、且ThreadId为空)

2. 如果是可偏向状态,则通过CAS操作,把当前线程的ID写入到MarkWord

a) 如果cas成功,那么markword就会变成这样。表示已经获得了锁对象的偏向锁,接着执行同步代码块

b) 如果cas失败,说明有其他线程已经获得了偏向锁,这种情况说明当前锁存在竞争,需要撤销已获得偏向锁的线程,并且把它持有的锁升级为轻量级锁(这个操作需要等到全局安全点,也就是没有线程在执行字节码)才能执行

3. 如果是已偏向状态,需要检查markword中存储的ThreadID是否等于当前线程的ThreadID

a) 如果相等,不需要再次获得锁,可直接执行同步代码块

b) 如果不相等,说明当前锁偏向于其他线程,需要撤销偏向锁并升级到轻量级锁

偏向锁的获取和撤销逻辑相关推荐

  1. 偏向锁的获取和撤销详解

    Java SE 1.6 为了减少获得锁和释放锁带来的性能消耗,引入了偏向锁和轻量级锁:在Java SE 1.6 中,锁共有4种状态,级别从底到高依次是:无锁状态.偏向锁状态.轻量级锁和重量级锁状态,这 ...

  2. 【正本清源】Synchronized 源码全解之偏向锁的获取(基于 Openjdk12)

    文章目录 BasicObjectLock BasicLock oopDesc markOopDesc 偏向锁 偏向锁的获取 monitorenter 源码验证(bytecodeInterpreter. ...

  3. 难搞的偏向锁终于要被Java移除了

    [文章来源][公众号:日拱一兵] 背 景 在 JDK1.5 之前,面对 Java 并发问题, synchronized 是一招鲜的解决方案: 普通同步方法,锁上当前实例对象 静态同步方法,锁上当前类 ...

  4. 在Java 17中偏向锁可算是废了

    与优秀的人在一起,自己也会优秀起来 高质量技术交流群,您还没加入吗? 赶紧点击加入我们,享受一起成长的快乐! 背景 在 JDK1.5 之前,面对 Java 并发问题, synchronized 是一招 ...

  5. 死磕Synchronized底层实现--偏向锁

    注:本篇很长,请找个舒适的姿势阅读. 本文为synchronized系列第二篇.主要内容为分析偏向锁的实现. 偏向锁的诞生背景和基本原理在上文中已经讲过了,强烈建议在有看过上篇文章的基础下阅读本文. ...

  6. Synchronized原理(偏向锁篇)

    Synchronized原理(偏向锁篇) 传统的锁机制 传统的锁依赖于系统的同步函数,在linux上使用mutex互斥锁,最底层实现依赖于futex,这些同步函数都涉及到用户态和内核态的切换.进程的上 ...

  7. 在Java 17中偏向锁可算废了

    背景 在 JDK1.5 之前,面对 Java 并发问题, synchronized 是一招鲜的解决方案: 普通同步方法,锁上当前实例对象 静态同步方法,锁上当前类 Class 对象 同步块,锁上括号里 ...

  8. 锁记——偏向锁注定过不好这一生

    背景 在 JDK1.5 之前,面对 Java 并发问题, synchronized 是一招鲜的解决方案: 普通同步方法,锁上当前实例对象 静态同步方法,锁上当前类 Class 对象 同步块,锁上括号里 ...

  9. java中锁的基本原理和升级:偏向锁、轻量级锁、重量级锁

    目录 由一个问题引发的思考 多线程对于共享变量访问带来的安全性问题 线程安全性 思考如何保证线程并行的数据安全性 synchronized 的基本认识 synchronized 的基本语法 synch ...

最新文章

  1. NVIDIA FFmpeg 转码技术分析
  2. 用python画图代码比卡丘-Python选修课第二届Turtle绘图大赛 (皮卡丘)
  3. python创建csv文件并写入-Python 将数据写入文件(txt、csv、excel)
  4. python tkinter选择路径控件_如何使用tkinter在Python中选择目录并存储位置
  5. Spring Boot笔记-IDEA使用JPA映射时解决cannot resolve column或cannot resolve table
  6. sprintf函数的用法
  7. 微信小程序等第三方应用接入易班的api
  8. Java继承关系之富二代和他爹
  9. 百度android离线下载,离线宝app下载-百度离线宝 安卓版v1.0.0.0-PC6安卓网
  10. 一些学习,有趣,电影,资源网址
  11. 七年级上册教材同步英语笔记
  12. 隐藏的Word快捷键操作
  13. 4.4亿赎金,6800GB数据窃取,勒索病毒攻击到底怎么防?
  14. Dubbo3 落地实践及 Mesh 解决方案
  15. java毕业设计飞机航班信息查询系统源码+系统+数据库+lw文档+调试运行
  16. 为什么上传的格式是mp4在网页上无法播放是什么原因呢?
  17. IPv6数据报头部格式
  18. uvm_event的使用总结
  19. Three.js建模基础
  20. 做程序员一般都需要什么学历?大厂招不招低学历?你想知道的都在这里了

热门文章

  1. JAVA基本数据类型和引用数据类型的参数传递详解
  2. spring springboot websocket 不能注入( @Autowired ) service bean 报 null 错误
  3. RTP协议全解析(H264码流和PS流)(转)
  4. 网络编程: 基于UDP协议的socket
  5. ng-repeat 与ng-switch的简单应用
  6. linux服务器没网情况下手动安装软件几个方法
  7. ---WebCam网络摄像头10 socket
  8. sql语句转化为分页查询的一种实现
  9. 中国华南:狼性创业者的天堂
  10. 读取速度贼快的省市区地址库