Java 等待和通知:了解IllegalMonitorStateException
在多執行緒程式設計中,wait() 和notify() 方法允許協調其操作執行緒。但是,錯誤地使用這些方法可能會導致 IllegalMonitorStateException。
在給定的程式碼片段中,在 Main 類別中,您嘗試在 Main.main 上呼叫 wait()。但是,您會遇到 IllegalMonitorStateException。這是因為目前執行緒(主執行緒)沒有持有 Main.main 物件的鎖。
要解決這個問題,需要同步呼叫 wait() 的程式碼區塊。這可以透過在要等待的物件上使用synchronized(...) 區塊來實現。在本例中,它是Main.main 物件:
<code class="java">public void run() { try { synchronized (Main.main) { Main.main.wait(); } } catch (InterruptedException e) {} System.out.println("Runner away!"); }</code>
透過在Main.main 物件上進行同步,可以確保當前執行緒(執行程式執行緒)在執行等待之前取得該物件的鎖( )。當Main類別呼叫notifyAll()時,所有運行執行緒都會收到通知並且可以繼續執行。
同樣的原理也適用於notify()和notifyAll()方法。它們只能由持有同步物件鎖的執行緒呼叫。
以上是為什麼在 Java 中使用 wait() 時會出現 IllegalMonitorStateException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!