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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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 ?
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
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
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 ?
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 ?