Java Wait and Notify : Comprendre IllegalMonitorStateException
Dans la programmation multithread, les méthodes wait() et notify() permettent aux threads de coordonner leurs actions. Cependant, une utilisation incorrecte de ces méthodes peut conduire à IllegalMonitorStateException.
Dans l'extrait de code donné, dans la classe Main, vous essayez d'appeler wait() sur Main.main. Cependant, vous rencontrez une IllegalMonitorStateException. En effet, le thread actuel (thread principal) ne détient pas le verrou sur l'objet Main.main.
Pour résoudre ce problème, vous devez synchroniser le bloc de code où wait() est appelé. Ceci peut être réalisé en utilisant un bloc synchronisé(...) sur l'objet que vous souhaitez attendre. Dans ce cas, il s'agit de l'objet Main.main :
<code class="java">public void run() { try { synchronized (Main.main) { Main.main.wait(); } } catch (InterruptedException e) {} System.out.println("Runner away!"); }</code>
En synchronisant sur l'objet Main.main, vous vous assurez que le thread courant (le thread runner) acquiert le verrou sur l'objet avant d'exécuter l'attente (). Lorsque notifyAll() est appelé depuis la classe Main, tous les threads d'exécution seront notifiés et pourront procéder à leur exécution.
Le même principe s'applique aux méthodes notify() et notifyAll(). Ils ne peuvent être appelés que par le thread qui détient le verrou sur l'objet synchronisé.
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!