Synchronisation de threads - Java - Programmation
Marsh Posté le 12-05-2003 à 15:53:28
ReplyMarsh Posté le 12-05-2003 à 15:54:20
il y a une chose simple à faire :
Code :
|
la méthode sera appelée plusieurs fois, mais jamais 2 fois en même temps (puisqu'elle est synchronized), et dans le cas où elle a déjà été appellée, les futurs appels ne ferons rien.
C'est une solution simple à ton problème
Marsh Posté le 12-05-2003 à 16:02:58
benou a écrit : il y a une chose simple à faire : |
merci, j'avais du mal a comprendre l'utilité de synchronized, je viens de comprendre
en fait, ce mot clé garantit que la methode ne sera accédee que par un thread a la fois.
mais que font les autres threads pendant ce temps ? ils attendent que le thread soit sorti de la methode pour y rentrer ?
et tu penses quoi de la methode de harkonnen (un evenement envoyé par le thread au programme principal), c'est aussi propre que ce que tu me proposes ?
Marsh Posté le 12-05-2003 à 16:30:55
vic le viking a écrit : mais que font les autres threads pendant ce temps ? ils attendent que le thread soit sorti de la methode pour y rentrer ? |
bha oui ...
vic le viking a écrit : |
le truc d'harko peut marcher aussi :
tu peut mettre ton thread principal en attante en fesant ca après avoir lancé tes threads :
Code :
|
et dans chacun de tes threads, il faudra qu'il possède une référence de ton thread pricnipal (ou plus précisément de l'objet que représente this dans le code ci-dessus), et plutot que d'appeler nettoyer à la fin de la boucle, tu mets ce code là :
Code :
|
les deux méthodes sont valables. Dans la mienne l'inconvénient est que tous les threads vont se bloquer sur la méthode nettoyer le temps que celle-ci soit executée, dans la méthode harko, le problème c'est que ca bloque le thread principal ...
Marsh Posté le 12-05-2003 à 17:33:51
merci pour ton explication claire
mine de rien, j'ai largement mieux compris ton explication que celle du prof
par curiosité, tu emploies quelle méthode dans ton bot ? celle que tu décris, ou celle de harkonnen ?
Marsh Posté le 12-05-2003 à 17:42:51
j'utilise les 2.
en fait j'utilise la 1ere méthode de façon à ce que je n'ai qu'un seul thread qui fasse le notify pare que dans mon cas c'est important : je remets le thread principal en wait juste après qu'il ait été redémarré => si un des autres thread le notify, ca le réveil alors que ca n'aurait pas dû.
Marsh Posté le 12-05-2003 à 15:49:07
bonjour
en cours, on a commencé les threads en java, et je comprends rien sur la synchronisation, c'est pas évident.
je donne un exemple d'un exercice qui me pose probleme :
- je créé une fonction (threadFonction)dans laquelle une boucle while tourne jusque ce que i == true
- a la fin de cette boucle while, je fais un appel à une fonction nettoyer()
dans mon programme principal, je créé ensuite 8 threads qui executent tous la meme fonction (threadFonction)
et mon probleme est la : sachant que la threadFonction est executée 8 fois simultanement, comment faire pour appeler la fonction nettoyer() qu'une seule fois ?
j'ai vu des sources en C# dans lesquels le thread envoie un evenement au thread principal qui se charge ensuite d'appeler l'equivalent de ma fonction nettoyer(), mais j'aurais voulu savoir d'autres manieres de faire plus simples.
benou, à l'aide
---------------
Bougredane et bougre d'andouille ne font qu'un !