一、wait方法的调用需要该线程首先获得对象的监视器
之所以有这样的一项规定就是为了避免一下几个问题:
1、无效唤醒 Lost Wakeup
上面只是说明了 wait、notify、notifyAll 必须放在 synchronized 同步块中,但是并没有解释到底是为什么。
我们不妨方向思考一波,如果不要求 wait 方法放在同步块中,而是可以随意调用,会怎样呢?
如下一段代码所示:
// 生产者伪代码
Producer:
count ++;
notify();
// 消费者伪代码
Consumer:
while(count <= 0)