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