1

运行将从主方法开始,如果在某些方法中我使用 this.wait() 没有同步块,它将抛出非法状态监视器异常。

如果只有一个线程为什么不能等待,我们为什么要在这里使用锁定。线程也不会执行任何其他任务。它本来可以在那里等着的。

我不明白为什么如果有单线程需要锁定。

public class waitSleepCheck extends Thread{

    public void method() throws InterruptedException ,IllegalMonitorStateException{

        this.wait(1000);

    }

    public static void main(String args[]) throws InterruptedException{
        waitSleepCheck object = new waitSleepCheck();
        object.method();
    }

}
4

3 回答 3

5

Object.wait不是“等这么久”。它是“等待其他线程做某事”。接受参数的形式是“等待其他线程做某事,但在这么长时间后感到无聊并停止”。您需要持有对象的锁以确保与线程正确同步,该线程将通知您您正在等待的事情已经完成。在单线程上下文中使用该方法没有意义。

如果你只是想等待一段时间,Thread.sleep是你想要的方法。

于 2013-08-29T05:19:33.667 回答
0

synch(lockObj) {Object.wait()}意味着您要等到另一个线程向您发出信号(请参阅 参考资料Object.notify())。在底层系统中,这些方法被翻译为wait(lockObj);pulseevent(target);你认为 JVM 会向他们提交哪些句柄?如果您没有指定锁定对象,那么 java 不知道您要通过哪个同步对象(又名锁定)进行通信。

于 2013-08-29T05:53:31.100 回答
0

因为您调用了一个“导致当前线程等待另一个线程......”的方法,所以首先不适用于单线程应用程序。

于 2013-08-29T05:40:17.977 回答