[Débutant] Synchronisation - wait() et notifyAll()
Bonjour à tous !
Je débute en JAVA et j'ai un petit problème pour la synchronisation :
Un maçon et un électricien doivent réaliser des travaux. Ces deux classes héritent d'une classe "corps de métier" qui contient les données de synchronisation. L'électricien commence ses travaux lorsque le maçon a fini les siens.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| public class CorpsMetier extends Thread {
public synchronized void attendreFinTravauxPrecedentCorpsMetier () {
try {
wait();
}
catch(InterruptedException e){}
}
public synchronized void finTravaux(){
notifyAll();
}
}
public class Macon extends CorpsMetier {
public void run() {
try {
System.out.println("Le maçon travaille");
sleep(5000); // Le maçon fait son travail
} catch (InterruptedException e) {}
finTravaux();
}
}
public class Electricien extends CorpsMetier {
public void run() {
attendreFinTravauxPrecedentCorpsMetier();
try {
System.out.println("L'électricien travaille");
sleep(5000); // L'électricien fait son travail
} catch (InterruptedException e) {}
finTravaux();
}
} |
DANS LE MAIN :
Code:
1 2 3 4 5
| Macon macon = new Macon();
Electricien electricien = new Electricien();
macon.start();
electricien.start(); |
Mon problème est que l'électricien reste bloqué sur le wait() et par conséquent ne fait jamais son travail. Le problème vient-il du fait que je n'utilise pas le même objet ? Je veux dire que le wait() de l'électricien attend un notifyAll() d'un autre electricien et non pas d'un maçon comme dans mon code ? Quelles solutions ?
Merci d'avance.
Matth.