首页 > 编程语言 >【学习底层原理系列】Java底层-synchronized锁-3轻量级锁篇

【学习底层原理系列】Java底层-synchronized锁-3轻量级锁篇

时间:2022-09-01 19:13:24浏览次数:66  
标签:重入 加锁 Java LockRecord MW LR 轻量级 底层

 一.上一篇回顾

1.偏向锁中的批量撤销和批量重偏向

2.偏向锁发生了竞争,锁就要升级

二.轻量级锁拆解

1.加锁流程

  1. 构建LockRecord,将LockRecord的obj指向当前锁对象,然后将无锁态的MW复制到LockRecord中。
  2. CAS修改MW内容为代表LockRecord的地址的指针。如果成功代表加锁成功。如果失败,进入重入或锁竞争逻辑。
    1. 如果MW中内容等于当前线程的LR地址指针,锁重入(在线程栈中增加一个LR,但是该LR的MW副本,不再赋值,是null,后面的解锁流程将会用到这个特性)
    2. 否则发生竞争,膨胀为重量级锁

2.解锁流程:核心是恢复锁对象的MW为初始态(无锁态)

  1. 处理重入锁(还原LR)。遍历线程栈中的LR,如果LR.MW副本为null,代表是一次重入的计数,那么将LR.obj置为null【重入锁,加锁多少次就要对应的释放多少次】
  2. 处理轻量级锁。如果不为空,代表是首次加的锁,此时用CAS将LR.MW副本,来恢复锁对象的MW。如果成功,代表释放成功。否则进入锁膨胀流程。

 

标签:重入,加锁,Java,LockRecord,MW,LR,轻量级,底层
From: https://www.cnblogs.com/xyang/p/12098239.html

相关文章

  • 【Java基础】类的结构之一:属性(变量)
    1.成员变量与局部变量二者的区别成员变量局部变量声明的位置直接声明在类中方法形参或内部、代码块内、构造器内等修饰符private、public、static、fin......
  • Vector底层实现
    Vector底层实现vector的三个私有成员:_start  记录初始位置 ,_finish 记录有效字符 ,_endofstoage 记录容量大小vector会存储的类型不同,所以要用模版来定......
  • java中的一维数组数组
    数组(array):是一种用于存储多个相同数据类型的存储模型(可以理解为容器)数组定义和静态初始化数组的两种定义格式:  格式1:    数据类型[]变量名;    范例......
  • 【Java基础】匿名对象
    1.匿名对象在创建对象时,没有显式的赋给一个变量名,匿名对象只能调用一次。Phonephone=newPhone();//正常的对象mail.show(phone);mall.show(newPhone());2.......
  • 学习日记Day4. Java 4
    Java个人总结4对象三大特性封装、继承、多态面向对象.以类的方式组织代码,以对象的组织(封装)数据对象内存分析多态存在条件有继承关系子类重写父类方法父类引......
  • 学习日记 Day3. Java 3
    title:Day3Java3date:2022-08-2922:20:14tags:JavaJava个人总结3位运算符位运算效率极高。A=00111100B=00001101---------------------------A&B......
  • JAVA常用集合解析
    JAVA常用集合解析常用集合属性详解集合底层实现原理常用集合适用场景分析集合属性详解集合是一个存放对象的引用的容器,在Java中它存在于java.util包下,List、Set......
  • 【Java面试】面试如何让面试官面的很爽,看完这道面试题,finally块一定会执行吗?
    “finally块一定会执行吗?”这是最近一个工作3年的小伙伴去面试的时候遇到的问题。你遇到这个问题会怎么回答呢?大家好,我是Mic,一个工作了14年的Java程序员对于这个问题,......
  • 【校招VIP】[Java][二本][5分]注意简历布局,突出项目重点
    关注【校招VIP】公众号,回复【简历】,添加校招顾问微信,即可获取简历指导!本份简历是一位21届二本java同学的简历,简历评分5分。一、学员简历  二、指导意见简历版式没......
  • Java接口自动化测试框架系列(二)表格设计与数据读取
    一、测试系统分析不同系统有不同的接口,通过分析这些接口,提取共同点可以得到不同地区的系统共有的接口。如:登录、登出、用户信息完善等接口二、表格设计  不同列......