Java的Wait和Notify:理解IllegalMonitorStateException
在Java中,wait和notify方法允许线程同步执行。但是,错误地使用这些方法可能会导致 IllegalMonitorStateException。
要了解原因,让我们分析一下提供的代码:
Main.java
Runner.java
问题出在 Runner.run() 中的 wait() 调用。当线程对对象调用 wait() 时,它必须拥有该对象的监视器。所有权是通过同步对象来建立的。
要解决此问题,请在 wait() 调用中在 Main.main 上同步:
class Runner implements Runnable {
public void run() {
try {
synchronized (Main.main) {
Main.main.wait();
}
} catch (InterruptedException e) {}
System.out.println("Runner away!");
}
}
这确保当前线程在进入wait()条件之前拥有Main.main的监视器。
同样的原理也适用于notify()和notifyAll()。在发出这些方法之前,线程必须拥有对象的监视器。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3