首頁  >  文章  >  Java  >  為什麼在使用 Java 的 Wait 和 Notify 時會出現 IllegalMonitorStateException?

為什麼在使用 Java 的 Wait 和 Notify 時會出現 IllegalMonitorStateException?

Barbara Streisand
Barbara Streisand原創
2024-10-30 19:39:03731瀏覽

Why Am I Getting an IllegalMonitorStateException When Using Java's Wait and Notify?

Java 等待和通知:克服 IllegalMonitorStateException

在嘗試用 Java 實現等待和通知時,您遇到了難以捉摸的 Illelleitor Illeslleitor。此錯誤表示當前執行緒不擁有與正在呼叫的物件關聯的監視器。

了解等待和通知中的所有權

如Javadocs 中所述wait() 中,執行緒在對某個物件執行wait() 之前必須擁有該對象的監視器。同樣,notify()和notifyAll()操作也需要呼叫執行緒擁有監視器。

將同步套用到Runner類別

要解決IllegalMonitorStateException,您可以在執行wait()之前需要確保目前執行緒擁有Main物件的監視器。您可以透過同步Runner 類別的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 上同步,可以確保目前執行緒在執行之前取得Main 物件的監視器等待()。這允許您成功等待通知,而不會遇到 IllegalMonitorStateException。

執行緒所有權注意事項

在 Java 中,執行緒在執行同步時取得物件監視器的所有權該物件的區塊或同步方法。當執行離開同步區塊或方法時,它釋放所有權。

以上是為什麼在使用 Java 的 Wait 和 Notify 時會出現 IllegalMonitorStateException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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