Bonjour à tous,
Je débute avec les threads et j'aurais besoin d'une personne généreuse pour m'expliquer ce qui cloche dans mon code.
Je suis sûr que c'est un truc tout con mais je bloque vraiment là
En gros pour situer le contexte, j'ai un objet (Dispatcher) qui attend que des threads lui envoient des infos pour pouvoir les traiter.
Le soucis c'est que mon utilisation des wait/notify ne semble pas être au point car je me retrouve avec une deadlock.
Donc ma classe Dispatcher ressemble à ça :
Et ma classe mes threads ressemblent à ça (je sais il faudrait que je fasse des runnables).
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 public class Dispatcher(){ ... public void handleEvents() throws InterruptedException { // Démarrage des threads while(!Thread.interrupted()){ for(Thread t : threadArray){ if (t.getState() == Thread.State.NEW){ t.start(); } } // Attente d'objets fournis par les threads lancés ci-dessus while(_ObjetList.isEmpty()){ synchronized (this) { this.wait(); system.out.println("fin de l'attente"); } } /* Traitement des objets dans _ObjetList */ } // fin while(!Thread.interrupted()) } // fin methode handleEvent() }
D'après mes tests, les threads n'arrivent pas a finir la 1ere boucle (ça coince au niveau du notify).
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 public class MyThread extends Thread { ... public void run(){ try{ while(!Thread.currentThread().isInterrupted()){ Object o = eh.getHandle().read(); // je recupere mon objet _dispatcher.addObjet(o); // je l'ajoute a _ObjetList _dispatcher.notify(); } } catch (Exception e) { // TODO: handle exception } }
Je vous remercie d'avance de l'aide et des conseils que vous pourriez m'apporter.
Partager