首頁  >  文章  >  Java  >  為什麼在 Java 中使用 wait() 時會出現 IllegalMonitorStateException?

為什麼在 Java 中使用 wait() 時會出現 IllegalMonitorStateException?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-01 05:25:02518瀏覽

Why Do I Get `IllegalMonitorStateException` When Using `wait()` in Java?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn