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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.