Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

lancer n threads et attendre avant de continuer

2 réponses
Avatar
neo
Bonjour,

je voulais savoir s'il existait des objets dans l'API JAVA qui permettrait
simplement de lancer n threads puis de tous les attendre avant de continuer
le process ?

Merci à vous !

Nelson

2 réponses

Avatar
Al
plein de méthode.
avec les jdk ancien.

attention le soucis c'est que pour la synchro, les thread de travail
doivent verrouiler un machin, et que pour celà elle doivent avoir
commencé à bosser... or quand tu lance une thread tu n'est pas certin
qu'elle se soient déja exécutées

c'ets pas trivial ...
un truc que je verrais, c'est que chaque hread est un objet drapeau de
départ, et un objet drapeau d'arrivée.
pour chaque thread de travail, la thread maitre lance le thread de
travail et se met en attente sur le drapeau de départ (wait).
dans le corps de la thread de travail, il y a un gros bloc synchronized
sur le drapeau d'arrivée, et dedans ca fait un notify sur le drapeau de
départ (qui débloque la thread maitre qui continue a créer les autres
threads donc), puis ca bosse, et ca sort du bloc synchro du drapeau
d'arrivée.
ensuite, une fois toutes les thread lancées,
la thread maitre fait une boucle sur tout les drapeau d'arrivée

puis pour chaque drapeau d'arrivée, avec une boucle, la thread maitre
passe dans un bloc synchonized, qui a chaque fois attendra que la thread
correspondante se termine (sortie du bloc synchronized, donc travail fini)

avec le JDK récent tu a un package java.util.concurrent,
http://java.sun.com/javase/6/docs/api/java/util/concurrent/package-summary.html
(regarde la doc à la fin... super instructif)
qui doit contenir des barrières, qui font ca plus simplement
par ex, mais pas seulement:
http://java.sun.com/javase/6/docs/api/java/util/concurrent/CyclicBarrier.html

sinon avec les Future et les Executor, tu as peut être un mécanisme qui
fait ce que tu souhaite en fait
(ici tu parle en terme de solution technique, Future et Executor sont
peut être tes vrais solutions applicatives, avec des implémentations
dans ce package)




Bonjour,

je voulais savoir s'il existait des objets dans l'API JAVA qui permettrait
simplement de lancer n threads puis de tous les attendre avant de continuer
le process ?

Merci à vous !

Nelson




Avatar
Al
en passant j'ao oublié le plus simple :
thread.join()

c'est plus simple que ma solution (qui est peut être du style de celle
qu'utilise join en interne)
mais sincèrement, le package concurent est une mine d'or si tu as des
problèmes de parallélisme...
les worker thread permette notamment de controler ton parallélisme en
fonction de ce dont ton processeur dispose (éviter de trop créer de threads)

Bonjour,

je voulais savoir s'il existait des objets dans l'API JAVA qui permettrait
simplement de lancer n threads puis de tous les attendre avant de continuer
le process ?

Merci à vous !

Nelson