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中文網其他相關文章!