Salut à tous
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.
Message édité par Flitz le 04-04-2006 à 11:18:08