关于wait与notify的使用

wait可以把某个拿到锁的线程冬眠,并释放锁。

其他线程获取锁,完成工作后,可以通过notify唤醒其他需要这个锁的冬眠进程。

冬眠进程醒了后,尝试获取锁,得到锁后继续工作。

 

好比一群熊围着一个碗,要吃饭。

1)看到碗里没有饭,就放开碗去睡觉(wait)。以免影响饲养员放食物。碗只能一个动物使用(一个带锁的碗)。

2)饲养员放好食物后,可以摇铃铛(notifyAll),叫醒所有熊,来吃饭。

注意:因为有多个熊,一个熊醒了拿到碗后,可能这个碗的食物之前被另外一个熊吃掉了。所有1)过程是一个while判断,不能用if。看不到食物,继续睡觉(wait)

posted @ 2020-09-29 11:15  Valentino  阅读(571)  评论(0编辑  收藏  举报