wait可以把某个拿到锁的线程冬眠,并释放锁。
其他线程获取锁,完成工作后,可以通过notify唤醒其他需要这个锁的冬眠进程。
冬眠进程醒了后,尝试获取锁,得到锁后继续工作。
好比一群熊围着一个碗,要吃饭。
1)看到碗里没有饭,就放开碗去睡觉(wait)。以免影响饲养员放食物。碗只能一个动物使用(一个带锁的碗)。
2)饲养员放好食物后,可以摇铃铛(notifyAll),叫醒所有熊,来吃饭。
注意:因为有多个熊,一个熊醒了拿到碗后,可能这个碗的食物之前被另外一个熊吃掉了。所有1)过程是一个while判断,不能用if。看不到食物,继续睡觉(wait)