简介
监视器/管程
每个Java对象都可以关联一个Monitor对象,当使用synchronized给对象加锁(重量锁)后,该对象头的Mark Word中就被设置指向Monitor对象的指针
加锁原理
1、Obj对象的MarkWord指向Monitor
2、MarkWord全部改变为 --> ptr_to_heavyweight_monitor:30 10
3、线程A拿到锁,成为Monitor的Owner
4、其他线程(B、C)进入Monitor的阻塞队列EntryList
5、线程A执行完毕,取消指向Owner,此时唤醒阻塞队列中的线程,B和C进行竞争锁(非公平竞争)
6、假设线程B竞争到了锁,那么便是此Monitor的新Owner