谁调用wait()方法,主线程或用于调用wait()的实例

时间:2015-12-13 09:57:09

标签: java multithreading

我对线程中的wait()方法如何工作感到很困惑。假设我写道:

public class test3 {
    public static void main(String args[]){
        Thread A = new Thread();
synchronized(this){
            A.wait();
}
    }
}

现在这里方法wait()将被哪个线程调用 - 主线程或线程A,在其他意义上,哪个线程将离开监视器并暂时进入休眠状态。

1 个答案:

答案 0 :(得分:3)

main线程将在A的实例上等待。即,线程A将用作锁,主线程将等待另一个线程调用notify()

注意 - 在未获取实例锁定的情况下调用wait() / notify()将导致IllegalMonitorStateException

wait()notify()Object类中定义的方法。线程在实例上调用wait()notify()(AKA称为锁AKA监视器)。因此,当您使用synchronized关键字时,您会在已同步的对象上获得锁定(也称为进入监视器)。接下来,当您调用wait()时,获取锁定的线程将等待另一个线程在同一实例(同一锁定)上调用notify()