如果只有线程,为什么我们需要对象监视器

时间:2013-08-29 05:02:49

标签: java

运行将从main方法开始,如果在某些方法中我使用this.wait()而没有synchronized块,则会抛出illegalStateMonitorException。

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

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

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();
    }

}

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

因为您调用了"causes the current thread to wait until another thread ..."的方法,因此首先不适合单线程应用程序。

答案 2 :(得分:0)

synch(lockObj) {Object.wait()}表示您等到另一个线程发出信号(见Object.notify())。在底层系统中,这些方法被转换为wait(lockObj);pulseevent(target);您认为JVM会向它们汇总哪些句柄?如果你没有指定锁对象,那么java不知道你要通过哪个同步对象(也就是锁)。