当线程0已经获取了Objec的轻量级锁,当线程1再获取时,就获取不到了,cas就会失败,此时就进入了锁膨胀过程。
(1)object对象会申请Monitor重量级锁,让Object记录重量级锁的地址。
(2)申请完之后,线程0时重量级锁(Monitor)的owner。
(3)线程1进入重量级锁(Monitor)的EntryList 阻塞(BLOCKED)。
当线程0的同步代码块执行完了之后,需要解锁时,需要按照重量级锁的解锁流程解锁了。
找到Monitor,设置Owner为null,唤醒EntryList 中的线程1,如果有多个线程在EntryList里面,那么它们将会竞争。