锁膨胀过程
2020-04-26 17:04:40 1 举报
synchronized锁膨胀过程
作者其他创作
大纲/内容
标志位00 轻量级锁
是 可偏向锁
是
CAS操作将对象中的Mark Word更改指向栈帧中的Lock Record指针
暂停持有偏向锁线程
是否可偏向
更新失败
是否可重偏向
锁膨胀,修改为重量级锁
标志位10 重量级锁
判断Mark Word中是否存储当前线程ID
等待全局安全点,暂停所有线程
是否是匿名偏向状态
执行同步代码块
自旋更新
Mark Word是否指向当前线程
将对象设置为无锁状态
线程访问同步块
CAS修改Mark word中锁偏向线程ID
持有线程是否存活
竞争成功
更新成功
否
修改失败
升级为轻量级锁
目前锁状态
开启锁竞争
竞争失败
将对象设置为匿名偏向状态
被唤醒
否 无锁状态
执行结束
释放轻量级锁,CAS操作将Displaced Mark Word 替换为对象头
偏向锁撤销
释放锁
是否执行同步块代码
释放锁并唤醒等待的线程
执行同步代码
线程阻塞
锁标志位(01)
获取锁,执行同步代码块
自旋超过一定次数
修改成功
0 条评论
下一页