Java 的等待和通知:了解 IllegalMonitorStateException
在 Java 中,等待和通知方法允许线程同步执行。但是,错误地使用这些方法可能会导致 IllegalMonitorStateException。
要了解原因,让我们分析一下提供的代码:
Main.java
Runner.java
问题在于 Runner.run() 中的 wait() 调用。当线程对对象调用 wait() 时,它必须拥有该对象的监视器。所有权是通过同步对象来建立的。
要解决此问题,请在 wait() 调用中同步 Main.main:
<code class="java">class Runner implements Runnable { public void run() { try { synchronized (Main.main) { Main.main.wait(); } } catch (InterruptedException e) {} System.out.println("Runner away!"); } }</code>
这可确保当前线程拥有 Main。
同样的原理也适用于notify()和notifyAll()。在发出这些方法之前,线程必须拥有对象的监视器。
以上是为什么在使用 Java 的 Wait 和 Notify 时会出现 IllegalMonitorStateException?的详细内容。更多信息请关注PHP中文网其他相关文章!