以前是基于重量级锁的。每次moniterenter,都试图获取monitor,获取失败就会阻塞休眠,当并发量较小的时候,带来的延迟比较大。 举个形象的例子: 每次你想去拿锁,拿到就继续做事,拿不到就睡一觉,等别人把锁还回去。结果一觉醒来天都黑了,人家早就把锁还回去了。
除了重量级锁外,还引入了偏向锁、轻量级锁。三者的具体行为我就不说了,网上的流程图已经够了,这里记录自己的理解。
monitor底层基于操作系统的mutexLock,所以object.notifyAll唤醒的线程就 取决于mutexLock了吧。 (需要验证)