Attente et notification de Java : compréhension de l'exception IllegalMonitorStateException
En Java, les méthodes d'attente et de notification permettent aux threads de synchroniser leur exécution. Cependant, une mauvaise utilisation de ces méthodes peut conduire à IllegalMonitorStateException.
Pour comprendre pourquoi, analysons le code fourni :
Main.java
Runner.java
Le problème réside dans l'appel wait() dans Runner.run(). Lorsqu'un thread appelle wait() sur un objet, il doit posséder le moniteur de cet objet. La propriété est établie par synchronisation sur l'objet.
Pour résoudre le problème, synchronisez sur Main.main dans l'appel 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>
Cela garantit que le thread actuel possède Main. moniteur principal avant d'entrer la condition wait().
Le même principe s'applique à notify() et notifyAll(). Un thread doit posséder le moniteur de l'objet avant d'émettre ces méthodes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!