11-Monitor

首先先了解下对象头结构(对象体这里忽略)

推荐文章

 Mark Word的存储内容会随着不同的状态而变化

  

创建锁记录对象:

加锁方法的栈帧中会有一个锁记录结构,内部可以存储锁定对象的Mark Word,让锁记录中Object reference指向锁对象,并尝试用cas替换Object的Mark Word,将Mark Word的值存入锁记录

 如果cas成功,对象头中存储了锁记录地址和状态00,表示由该线程给对象加锁,结果如图所示

 

 如果cas失败

        如果是其它线程已经有了该Object的轻量锁,这是表明有竞争,进入锁膨胀

锁膨胀文章

        如果是自己执行了synchronized锁重入,那么再添加一条Lock Record作为重入计数

当退出同步代码块如果有取值为null的锁记录时,表示有重入,计数减一

当退出同步代码块如果没有取值为null的锁记录时,用cas将Mark Word值恢复给对象头,如果失败说明轻量锁已经锁膨胀升级为重量锁,那么会继续执行重量锁的解锁步骤

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值