Java Wait and Notify : surmonter IllegalMonitorStateException
Dans votre tentative d'implémenter Wait and Notify en Java, vous avez rencontré l'insaisissable IllegalMonitorStateException. Cette erreur indique que le thread actuel ne possède pas le moniteur associé à l'objet invoqué.
Comprendre la propriété en attente et notifier
Comme indiqué dans la documentation Java pour wait(), un thread doit posséder le moniteur d'un objet avant d'exécuter wait() sur cet objet. De même, les opérations notify() et notifyAll() nécessitent également que le thread appelant soit propriétaire du moniteur.
Application de la synchronisation à la classe Runner
Pour résoudre l'exception IllegalMonitorStateException, vous Vous devez vous assurer que le thread actuel possède le moniteur de l'objet Main avant d'exécuter wait(). Vous pouvez y parvenir en synchronisant la méthode run() de la classe Runner comme suit :
<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>
En synchronisant sur Main.main, vous vous assurez que le thread actuel acquiert le moniteur de l'objet Main avant d'exécuter attendez(). Cela vous permet d'attendre avec succès une notification sans rencontrer l'IllegalMonitorStateException.
Remarque sur la propriété du thread
En Java, un thread acquiert la propriété du moniteur d'un objet lorsqu'il s'exécute de manière synchronisée. blocs ou méthodes synchronisées de cet objet. Il libère la propriété lorsque l'exécution quitte le bloc ou la méthode 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!