Java's Wait and Notify: IllegalMonitorStateException verstehen
In Java ermöglichen Wait- und Notify-Methoden Threads, ihre Ausführung zu synchronisieren. Die falsche Verwendung dieser Methoden kann jedoch zu einer IllegalMonitorStateException führen.
Um zu verstehen, warum, analysieren wir den bereitgestellten Code:
Main.java
Runner.java
Das Problem liegt im Aufruf wait() in Runner.run(). Wenn ein Thread wait() für ein Objekt aufruft, muss er Eigentümer des Monitors dieses Objekts sein. Der Besitz wird durch die Synchronisierung des Objekts festgelegt.
Um das Problem zu beheben, synchronisieren Sie Main.main innerhalb des Aufrufs „wait()“:
<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>
Dadurch wird sichergestellt, dass der aktuelle Thread Main besitzt. Überprüfen Sie den Hauptmonitor, bevor Sie in die Wait()-Bedingung eintreten.
Das gleiche Prinzip gilt für notify() und notifyAll(). Ein Thread muss Eigentümer des Monitors des Objekts sein, bevor er diese Methoden ausgibt.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich eine IllegalMonitorStateException, wenn ich Javas Wait and Notify verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!