-
Pause d'un thread
Bonjour,
Je travail actuellement sur les threads et j'aurais besoin de quelques precisions.
J'ai actuellement deux threads qui sont lancés.
Si j'ai bien compris ils s'executent à tour de role jusqu'a ce qu'ils soit finis.
Si un thread finis lontemps avant l'autre c'est le 2ieme threads qui prend la main tout le temps.
Jusque la est-ce bien exacte?
Maintenant je voudrais que lors de la premiere prise de main l'un de mes threads se mettent en pause Xsecondes pour que l'autre garde la main pendant le minimum de ces X secondes.
Hors je ne sais pas si je dois faire la pause dans le threads ou dans la fonction qui lance les threads.(par Object.start() )
Merci de m'orienter.
-
je te conseille d'aller voir la doc: les threads
Pour repondre a ta question il faut que tu executes ta commande (par exemple wait() ou sleep()) sur le thread que tu veux gerer. Mais tu peux le faire dans ton processus principal ou dans un autre.
-
J'ai déja lu cette doc et pas mal d'autre sur les thread....
Ca repond pas trop a ma question pour savoir si j'ai bien compris ou pas.
Si j'execute la wait dans la classe qui extends Thread le Threads va prendre le temps et l'autre ne s'executera pas durant ce temps la, il s'executera qu'une fois la main reprise non?
-
Il ne faut pas partir du principe que les threads s'exécutent à tour de rôle, à moins que tu aies un processeur qui a fait la guerre, tu as un processeur qui fait du multi-thread. Même si les threads ne sont pase exécutés réellement en même temps, le temps de passage de l'un à l'autre est vraiment négligeable.
En partant de ce principe (les 2 threads s'exécutent en parallèle), il est plus facile de comprendre que si tu fais un wait() dans un thread, ça ne changera strictement rien dans l'autre
-
Chaque Thread a un temps processeur pour s'exécuter. C'est une émulation d'un multiprocesseur en fait. Dans un état normal, chaque Thread cohabite en parallèles. Lorsque sa méthode run est terminé, il s'arrête.
Tu peux endormir l'un des thread, pour laisser a l'autre le temps de d'exécuter une partie de son code. Dans ce cas la, le processus ne fera qu'attendre un notify() pour pouvoir se réveiller (d'où la libération du processeur).
Donc en gros, un wait() sur un processus leger ne va entrainer une perte de temps processeur
-
D'accord merci de ses précisions.
Par contre comment faire pour que le wait ne s'effectue qu'une fois?
Je le met dans ma function run()?
-
si tu met un wait(), n'oublie pas qu'un autre thread va devoir faire un notify() sur ce meme objet pour réveiller ton thread. Et oui, le wait() doit etre fait depuis run() ou une méthode appelée par run()