Synchronisation de Threads
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à :calim2:
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 :
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
|
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()
} |
Et ma classe mes threads ressemblent à ça (je sais il faudrait que je fasse des runnables).
Code:
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
}
} |
D'après mes tests, les threads n'arrivent pas a finir la 1ere boucle (ça coince au niveau du notify).
Je vous remercie d'avance de l'aide et des conseils que vous pourriez m'apporter.