- 如果 thread1 获取了偏向锁,此时对象头
Mark Word
中的 ThreadID 为 thread1 - thread1 执行同步块到一半的时候,thread2 尝试获取锁,CAS 替换
Mark Word
的 ThreadID 失败,则会开始偏向锁撤销 - 在 thread1 到全局安全点的时候,暂停 thread1,检查 thread1 的状态,发现 thread1 暂未退出同步块,此时升级轻量级锁
- 此时升级轻量级锁做了哪些事?后续 thread1 和 thread2 如何处理?
Mark Word
中的 ThreadID 为 thread1Mark Word
的 ThreadID 失败,则会开始偏向锁撤销8 回答6.5k 阅读
3 回答2.4k 阅读✓ 已解决
4 回答697 阅读✓ 已解决
2 回答3.4k 阅读
3 回答1.9k 阅读✓ 已解决
1 回答2.2k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
升级就是把bias thread栈中最早的Lock Record的displaced markword改成无锁状态的mark word 然后把锁对象的mark word改成指向这个Lock Record的指针,就变成轻量级锁了
后续的话就是轻量级锁的逻辑啊 thread1继续拿着锁 thread2自旋等待