synchronized锁升级
2021-11-25 17:08:25 8 举报
synchronized锁升级
作者其他创作
大纲/内容
获取重量级锁
原持有线程进入安全点,拷贝对象头到锁记录中
当前锁状态
成功
cas参数把monitor的owner设置为当前线程
是否成功
进入_EntryList队列等待唤醒
01
失败
替换成功
否
锁标记位(2bit)
状态
hash/age/0
无锁
thread/epoch/age/1
偏向锁(cas换线程id)
指向当前锁记录的指针
00
轻量级锁(cas自旋)
指向monitor指针
10
重量级锁(操作系统)
11
标记gc
获取偏向锁
等待唤醒进行新一轮的竞争
重量级锁(10)
继续持有
执行同步代码
重量级锁
修改失败到一定次数
原持有线程进入安全点。修改对象头,获得重量级锁
是否偏向锁
是
升级成重量级锁
轻量级锁
轻量级锁(00)
获取轻量级锁
循环cas修改对象头信息
当前线程栈中分配锁记录
进入同步方法,同步块
偏向锁
cas替换对象头线程id
退出同步块
对象头是否为当前线程id
等持有线程进入安全点,检查原持有线程状态
0 条评论
下一页