如果你确认方法wait一次就能做完,当然可以用if+wait方法了,但一般在应用中,可能需要执行wait后的操作多次,所以用while+wait方法。所以,用while还是用if还是用什么根据程序决定吧(if的例子在张孝祥老师编的《java就业培训教程》p210有例子)。
wait()是在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。
当前线程必须拥有此对象监视器。该线程发布对此监视器的所有权并等待,直到其他线程通过调用 notify 方法,或 notifyAll 方法通知在此对象的监视器上等待的线程醒来。然后该线程将等到重新获得对监视器的所有权后才能继续执行。
对于某一个参数的版本,实现中断和虚假唤醒是可能的,而且此方法应始终在循环中使用:
synchronized (obj) {
while (<condition does not hold>)
obj.wait();
... // Perform action appropriate to condition
}
此方法只应由作为此对象监视器的所有者的线程来调用。 |