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