我对线程中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()(相同的锁)。

07-24 09:49
查看更多