轻量级申请请流程

首先判断 Mark Word 是否是中立的,即 Mark Word 的最后三个字节的值是否为1(001)。如果是中立的,则表示此时处于未锁定且不可偏向。

因此,首先会将锁对象的 Mark Word 放入到 lock 对象(这就是我们常说的 Lock Record)的 displaced_header 属性中,然后使用 CAS 将对象的 Mark Word 更新为指向 Lock Record 的指针。如果更新成功,表示这个线程就拥有了该对象的锁并且 Mark Word 的锁标志位(Mark Word 的最后2bit)将转变为00,即表示此对象处于轻量级锁定状态。

https://blog.csdn.net/a3961401/article/details/111304671

==================
在 slow_enter 中,如果 CAS 替换对象头失败,则会调用 inflate 获取 Monitor 对象,调用 Monitor.enter 最终去申请重量级锁。

posted @ 2021-08-07 19:14  TomStudio  阅读(60)  评论(0)    收藏  举报