synchronized锁升级
2020-08-13 08:57:32 0 举报
synchronized 锁升级
作者其他创作
大纲/内容
访问同步块
成功
线程阻塞
偏向状态锁
升级为轻量级锁
释放锁,唤醒阻塞线程,开始新一轮的锁竞争
检查Thread ID是否是线程2
到达安全点
CAS 修改Mark Word
无锁状态
线程2 在栈上分配空间,拷贝Mark Word 到 Lock Record中
失败
CAS修改Mark Word
synchroniized 升级
执行同步块
线程1
升级为轻量级锁或者恢复到无锁状态
检查Thread ID是否是线程1
线程2
线程1 在栈上分配空间,拷贝Mark Word 到 Lock Record中
修改失败
Object 对象的Mark Word
否
开始撤销偏向锁
自旋一定次数依然没有成功
释放锁
重试
自旋获取锁
检查线程1是否退出同步块
暂停线程1
解锁,将线程ID置为空,偏向锁状态修改为0
将线程头中的Thread ID指向线程1
锁膨胀,升级为重量锁
重量级锁状态
0 条评论
下一页