探究 synchronized 和 Monitor 的关系。
Monitor 被翻译成监视器或者管程。
每个 Java 对象都可以关联一个 Monitor 对象,如果使用 synchronized 给对象上锁(重量级)之后,该对象头 Mark Word 中就会被设置只想 Monitor 对象的指针。
Monitor 结构
Monitor是操作系统的对象,开始的时候,Monitor的Owner是null- 当 
Thread-1执行synchronized(obj)将会把Monitor所有者owner设置为Thread-1,Monitor中只有一个Owner - 当 
Thread-1上锁后,如果Thread-3、Thread-4也来执行synchronized(obj),机会进入到EntryList blocked - 当 
Thread-1执行完同步代码块的内容,然后唤醒EntryList中等待的线程来竞争锁,竞争时是非公平的 Thread-5、Thread-6是之前已经获得过锁的线程,但条件不满足进入 waiting 状态的线程
注意
synchronized必须是进入同一个对象的Monitor才有上述效果- 注意上述是重量级锁的过程