[Resolu] faire attendre un thread sur tous les autres différents

faire attendre un thread sur tous les autres différents [Resolu] - Java - Programmation

Marsh Posté le 03-04-2006 à 21:01:37    

Salut à tous  :hello:  
 
je suis en train de programmer une application en Java et j'ai besoin des threads. J'en ai déjà eu besoin auparavant mais ici j'ai un petit problème de conception, je ne vois pas trop comment m'y prendre. Quand je parle de conception c'est quels outils de Java utiliser, c'est comment organiser mon appli. Une fois l'outil désigné il n'y a pas de problème.
 
Voici donc ce que j'essaie de faire. Je possède un vecteur d'objets, tous les mêmes. J'aimerais lancer un thread pour chacun de ces objets. Le thread de chaque objet doit alors réaliser certaines opérations et compléter les informations dans les champs de son objets. Soit X le nombre de thread (et donc d'objets dans le vecteur). J'aimerais qu'une fois que les X threads ont fini de bosser, càd que toutes les infos sont stockées dans le vecteur (tous les champs des objets sont remplis),  qu'un autre thread complètement différent (ou même le thread qui a lancé tous les X autres) soit réveillé. Ce thread devra alors compléter une base de données avec les infos recueillies par les X autres threads.
 
Je viens de chercher sur le net et j'ai effectivement trouvé pas mal de chose. Cependant, il ne s'agit pas du tout d'un problème de gestion de données partagées puisque chaque thread a son propre objet. J'aimerais faire attendre le thread de la base de données tant que le vecteur n'est pas complet. Si je n'avais que deux threads j'aurais pu jouer avec synchronized ou notify mais là j'en ai tout un groupe et un différent.
 
Je suis tombé sur la méthode "join()" pour faire attendre la fin d'un thread mais je me vois mal faire un truc du genre  
 
T1.join();
T2.join();
....
T100.join();
 
pour faire attendre mon thread BD sur tous les autres.
 
Comme je vous l'ai dit, ce n'est pas l'implémentation même qui pose problème mais plutôt l'outils, méthodes, ... à utiliser. Je suis aussi tombé sur des "groupes" de threads, pensez-vous que ce soit une bonne idée.
 
Je recherche la rapidité et l'efficacité avec consommation min de mémoire et CPU (donc boucle infinie on oublie ;-)).
 
Auriez-vous des conseils ou idées ?
 
Merci d'avance.
 
 :jap:


Message édité par Flitz le 04-04-2006 à 11:18:08
Reply

Marsh Posté le 03-04-2006 à 21:01:37   

Reply

Marsh Posté le 04-04-2006 à 09:40:23    

Bon déjà je ne suis pas sur que ca soit une bonne idée de lancer une centaine de threads simultanement, tu risques de passer plus de temps dans le scheduler de thread que dans ton code.
Ensuite tu peut utiliser la méthode join() pour attendre la fin d'éxécution d'un tread.
Dans ton cas, stocke ta liste de thread dans une liste, ensuite parcours ta liste pour les lancer un à un, puis reparcours ta liste pour attendre la fin de chaque thread.


---------------
Light is right
Reply

Marsh Posté le 04-04-2006 à 11:17:41    

nerisson a écrit :

Bon déjà je ne suis pas sur que ca soit une bonne idée de lancer une centaine de threads simultanement, tu risques de passer plus de temps dans le scheduler de thread que dans ton code.
Ensuite tu peut utiliser la méthode join() pour attendre la fin d'éxécution d'un tread.
Dans ton cas, stocke ta liste de thread dans une liste, ensuite parcours ta liste pour les lancer un à un, puis reparcours ta liste pour attendre la fin de chaque thread.


 
Salut,
 
merci de ta réponse,
 
j'ai trouvé mon bonheur dans la version 1.5 avec les executor et les locket.
 
http://lroux.developpez.com/articl [...] oncurrence

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed