理解Wait 和Notify
理解Wait 和Notify
wae() 和notnify(類別用於Java 中的執行緒間通訊。 wait() 導致呼叫執行緒等待,直到另一個執行緒對同一物件呼叫 notification(),釋放該執行緒繼續執行。
IllegalMonitorStateException
IllegalMonitorStateException 是當執行緒嘗試等待物件而不持有其內在鎖時拋出。該鎖是透過使用同步區塊或方法在物件上進行同步來取得的。
在提供的程式碼中
您提供的程式碼遇到此異常,因為 wait() 方法被呼叫時沒有在適當的物件上進行同步。在 Runner 類別中,在 run() 方法中呼叫 wait() 方法。但是,run() 方法未在任何物件上同步。
解決方案
<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.main 上同步 run() 方法object,這是呼叫 wait() 的物件。這可確保當前執行緒在嘗試等待之前持有 Main.main 上的內在鎖。
此同步可確保目前執行緒在呼叫 wait() 之前取得 Main.main 上的內在鎖,從而防止拋出 IllegalMonitorStateException。以上是為什麼在 Java 中使用 wait() 和 notification() 時會收到 IllegalMonitorStateException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!