多线程—锁膨胀

 当线程0已经获取了Objec的轻量级锁,当线程1再获取时,就获取不到了,cas就会失败,此时就进入了锁膨胀过程。

(1)object对象会申请Monitor重量级锁,让Object记录重量级锁的地址。

(2)申请完之后,线程0时重量级锁(Monitor)的owner。

(3)线程1进入重量级锁(Monitor)的EntryList 阻塞(BLOCKED)。

 

当线程0的同步代码块执行完了之后,需要解锁时,需要按照重量级锁的解锁流程解锁了。

找到Monitor,设置Owner为null,唤醒EntryList 中的线程1,如果有多个线程在EntryList里面,那么它们将会竞争。

おすすめ

転載: blog.csdn.net/qq_42251944/article/details/120862618
おすすめ