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.
Partager