我对线程中的wait()
方法如何工作感到很困惑。假设我写道:
public class test3 {
public static void main(String args[]){
Thread A = new Thread();
synchronized(this){
A.wait();
}
}
}
现在这里方法wait()
将被哪个线程调用 - 主线程或线程A,在其他意义上,哪个线程将离开监视器并暂时进入休眠状态。
答案 0 :(得分:3)
main
线程将在A
的实例上等待。即,线程A
将用作锁,主线程将等待另一个线程调用notify()
。
注意 - 在未获取实例锁定的情况下调用wait()
/ notify()
将导致IllegalMonitorStateException
。
wait()
和notify()
是Object
类中定义的方法。线程在实例上调用wait()
和notify()
(AKA称为锁AKA监视器)。因此,当您使用synchronized
关键字时,您会在已同步的对象上获得锁定(也称为进入监视器)。接下来,当您调用wait()
时,获取锁定的线程将等待另一个线程在同一实例(同一锁定)上调用notify()
。