Premier code:Java threading problème de blocage
public class H extends Thread {
String info = "";
public H (String info) {
this.info = info;
}
public synchronized void run() {
try {
while (true) {
System.out.println(info);
notify();
wait();
}
} catch (Exception e) {}
}
public static void main (String args []) {
new H("0").start();
new H("1").start();
}
}
second code:
public class H extends Thread {
String info = "";
static Object o = new Object();
public H (String info) {
this.info = info;
}
public synchronized void run() {
try {
while (true) {
System.out.println(info);
o.notify();
o.wait();
}
} catch (Exception e) {}
}
public static void main (String args []) {
new H("0").start();
new H("1").start();
}
}
Si le premier code Je suis d'accord, il passe en état de blocage comme méthode d'exécution synchronisée ne sera jamais déverrouiller. Mais pourquoi dans le second code, si la méthode d'exécution entière est synchronisée sans objet, j'essaie d'attendre et de notifier l'objet o, il faut soit aller dans l'interblocage, soit exécuter le code continuellement (à cause de while (true)), mais le code existe avec le code de sortie 0. Quelqu'un peut-il m'aider à ce sujet. Merci d'avance !!!!
Dans le premier code n'y a pas de fil contenant les moniteurs verrouillage qui va réveiller le fil d'attente. Dans la seconde, printStackTrace() masque cette erreur: java.lang.IllegalMonitorStateException Voir le doc API pour les méthodes wait et nofity dans la classe Object. – NormR