理解 Wait 和 Notify
wait() 和 notify() 方法Object 类用于 Java 中的线程间通信。 wait() 导致调用线程等待,直到另一个线程对同一对象调用 notification(),释放该线程继续执行。
IllegalMonitorStateException
IllegalMonitorStateException 是当线程尝试等待对象而不持有其内在锁时抛出。该锁是通过使用同步块或方法在对象上进行同步来获取的。
在提供的代码中
您提供的代码遇到此异常,因为 wait() 方法被调用时没有在适当的对象上进行同步。在 Runner 类中,在 run() 方法中调用 wait() 方法。但是,run() 方法未在任何对象上同步。
解决方案
要解决此问题,您必须在 Main.main 上同步 run() 方法object,这是调用 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>
此同步可确保当前线程在调用 wait() 之前获取 Main.main 上的内在锁,从而防止抛出 IllegalMonitorStateException。
以上是为什么在 Java 中使用 wait() 和 notification() 时会收到 IllegalMonitorStateException?的详细内容。更多信息请关注PHP中文网其他相关文章!