wait() & notify() & notifyAll()
wait()
让不满足运行条件的线程进入等待状态。wait()方法必须在当前获取的锁对象上调用 。当一个线程处于等待时,就会释放锁对象,让其他线程能够调用。
循环调用wait()是一项编程范式:
while(条件不满足) {
wait();
}notify()
通知等待状态的线程继续运行。
notifyAll()
唤醒所有处于等待状态的线程,但这些线程中也只有一个线程可以获取锁并继续运行。
一般情况下都会选择使用 notifyAll()而不是notify(),因为notify()可能会导致有些低优先级的线程永远没有运行的机会。
与synchronized配套使用
因为需要操作锁对象,上述方法必须在synchronized块中使用。