锁的膨胀升级
2020-09-08 10:00:35 0 举报
synchronized
作者其他创作
大纲/内容
指向重量级锁的monitor
否
检查线程A是否退出同步块
00
lockRecord
对象分代年龄
唤醒
修改失败
进入自旋状态
10
运行完毕
再次尝试修改
准备释放轻量级锁,但是发现指针并不是指向自己,这时,释放锁,并且唤醒所有睡眠状态的 线程
826AYYFAUY
睡眠线程
持有锁
线程B转为内核态,且变为睡眠状态,然后修改锁的前30bit执行重量级锁的monitor
线程A
01
这个锁不是我的,但是我还想得到它
锁对象头MarkWord
1
偏向锁开始升级到轻量级锁
失败
升级到轻量级锁
UUIGYA71UGG176
owner空间
修改成功
null
是
尝试修改一次对象头的23Bit
线程BID:B136GTYDF
成功
B136GTYDF≠826AYYFAUY
撤销偏向锁
线程B
owner空间(YUGF673467UVYT73)
继续运行
线程A到达安全点
进入睡眠
线程B可以直接拿走使用
线程AID:826AYYFAUY
0 条评论
回复 删除
下一页