运行将从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();
}
}
答案 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不知道你要通过哪个同步对象(也就是锁)。