Bonjour à tous !
Pardon pour ce titre on ne peut plus généraliste mais je n'aurais pas pu faire plus clair sans rentrer dans les détails.
Mon problème est le suivant : je souhaite réaliser une application distribuée qui se charge de décomposer un "Job" en un certain nombre de plus petits "Jobs" (ex : le calcul de Pi à un certain nombre de décimale près)
Chaque petit job sera exécuté dans un thread à part. (Dans notre exemple, le premier thread calcule les 10 premières décimales, le second les 10 suivantes, et ainsi de suite...)
Au final, le Thread principal se charge donc de lancer autant de threads qu'il faut, les initialise correctement (Dans notre exemple, il indique les bornes de calcul, soit [0-10] pour le 1er thread, [11-20] pour le 2e...), et attend que chaque thread ait fini.
Je voudrais notifier l'utilisateur à chaque fin de petit job, pour qu'il voit qu'une étape est franchie.
Pour cela je pensais faire une boucle avec un wait() mais je pense que ca ne correspond pas exactement à ce que je recherche.
En effet si on boucle de 0 à nb_thread en faisant un wait() sur le thread i [hum, suis-je assez clair ?], il se peut que le thread i+1 ait déja terminé et que le thread i attende encore. Lorsque le thread i aura finalement calculé sa partie, nous aurons donc la notification de fin de l'étape i et en même temps celle de l'étape i+1.
Ce que j'aimerais avoir comme fonction (si le JDK veut bien me la proposer), ce serait une autre fonction qui met le Thread principal en veille et qui le réveille dès qu'un thread quelconque a fini son exécution. En somme, pour les adeptes du C, ce serait l'équivalent d'un select qu'il me faudrait.
Il me semble que ce soit possible avec un (une ?) sémaphore et un notify() dès qu'un thread a fini son exécution, mais j'aimerai éviter autant que possible de déployer ce mécanisme.
Bon, j'ai fait quelques recherches (quand même...) dans la fac, sur la doc de l'API, sur les tutos, mais je n'ai pas trouvé une fonction qui me convenait. Mais je pense qu'un mécanisme comme celui que je viens de décrire n'est pas hors du commun, donc la solution a du certainement glisser au travers des mailles du filet de mes recherches.
Je fais donc appel au puit de savoir qu'est ce site pour m'indiquer une manière de faire ou au moins un lien qui me l'expliquerait.
Par avance, merci.
Joe.
P.S.: Sorry pour le pavé...
Partager