说起线程的协调,我们就必须要知道三个方法:wait,notify和notifyAll。
具体讲三个方法之前先说一个概念wait set(也就是线程休息室)。
每个实例都有wait set,wait set是一个在执行该实例的wait方法时、操作停止的线程的集合。
进入wait set的线程如果想退出wait set,许满足下列条件:
1 有其他线程以notify方法唤醒此线程。
2 有其他线程以notifyAll方法唤醒此线程。
3 有其他线程以interrupt方法唤醒此线程。
4 wait方法已经到期。
wait是让线程停下,乖乖的等候,此线程进入wait set。
notify是唤醒指定的在等待的线程,随机唤醒一个此实例的wait set中的等待的线程,等到notify释放锁,在去争夺锁。
notifyAll是唤醒所有在等待的线程,唤醒所有此实例的wait set中的等待的线程,等到notifyAll释放锁,这些线程再去争夺锁。
wait,notify和notifyAll都是Object的方法,因为Thread也继承Object,所以也有这三个方法。
在Object的源码如下: