锁升级流程
2025-02-18 17:24:21 0 举报
锁升级流程全图,后续会持续更新
作者其他创作
大纲/内容
等待原持有偏向锁线程达到safe point
线程在栈帧中创建Lock Record,拷贝对象头的Mark Word
CAS将对象头的mark word恢复
失败
检查锁对象mark word是否指向当前线程锁记录
CAS将线程ID尝试设置成自己的
开始锁撤销机制
将monitor的owner设置为原持有锁线程,与之竞争的线程都进入Entrylist阻塞等待
否
通过CAS将对象头的Mark Word指向Lock Record
当前线程分配锁记录
未退出
升级
退出
释放锁成功
轻量级锁
成功
同步代码块执行完成
检查锁对象头部的线程ID是否是自己的
将monitor的owner设置为当前线程
进入重量级锁解锁流程
执行同步代码块
升级成重量级锁
线程1进入自旋
原持有偏向锁线程是否退出同步代码块
原持有偏向锁继续从安全点执行
执行完同步代码块
是否有线程竞争
线程访问同步代码块
是
唤醒原持有偏向锁的线程
原持有偏向锁线程栈中分配锁记录
自旋
锁对象申请一个monitor管程对象
进入轻量级锁解锁流程
锁状态是否可偏向
获得轻量级锁
将锁对象mark word指向monitor
0 条评论
下一页