1 seul passage dans run() pour une instance de Thread [Resolu] - Java - Programmation
Marsh Posté le 30-08-2002 à 09:58:00
Il me semble que la propriété alive couvre une période plus large que ce qu'on croit. D'après ce que j'ai lu dans Java Thread de O'reilly, il se pourrait qu'il y ait un piège. Mais ma mémoire me jouant des tours, je me contente de pointer le risque, sans t'apporter la confirmation.
Marsh Posté le 30-08-2002 à 10:03:50
Cherrytree a écrit a écrit : Il me semble que la propriété alive couvre une période plus large que ce qu'on croit. D'après ce que j'ai lu dans Java Thread de O'reilly, il se pourrait qu'il y ait un piège. Mais ma mémoire me jouant des tours, je me contente de pointer le risque, sans t'apporter la confirmation. |
bien essayé, mais j'y crois pas trop (dans mon cas).
A la fin de mon run, j'ai un :
System.out.println(this+" : fin du thread" );
et il s'affiche avant mon "111 ...".
J'ai même essayé en mettant un wait(10000) dans mon thread principal (avant le "111 ..." ) ==> pareil
Marsh Posté le 30-08-2002 à 10:08:16
De mémoire, j'avais déjà eu le problème : un thread ne peut être lancé qu'une seule fois. Si tu veux le relancer, il faut en fait créer un nouvel objet java.lang.Thread.
Autre solution, si tu veux quand même partager ton objet java.lang.Thread : jouer avec les wait() et les notify() (ou avec les stop() et resume(), mais ces 2 dernières méthodes sont deprecated depuis plusieurs versions de JDK).
Marsh Posté le 30-08-2002 à 10:13:05
c'est juste. Le cycle de vie de thread n'a qu'un et un seul passage dans run. Une fois que tu sors de ta méthode run l'objet ne peut plus etre utilisé.
A+
Marsh Posté le 30-08-2002 à 10:14:04
BifaceMcLeOD a écrit a écrit : De mémoire, j'avais déjà eu le problème : un thread ne peut être lancé qu'une seule fois. Si tu veux le relancer, il faut en fait créer un nouvel objet java.lang.Thread. |
C'est vrai ?
c'est relou !!
J'ai plein d'instances dans ma classe "MyThread"
bon ben, j'ai plus qu'à muter mon MyThread en MyRunnable, et dans la méthode run(), j'instancie un nouveau Thread à chaque fois.
Si quelqu'un pouvait confirmer ... (quoique j'ai pas de raison de pas faire confiance en McLeod )
Marsh Posté le 30-08-2002 à 10:14:21
DarkLord a écrit a écrit : c'est juste. Le cycle de vie de thread n'a qu'un et un seul passage dans run. Une fois que tu sors de ta méthode run l'objet ne peut plus etre utilisé. A+ |
oki oki
Marsh Posté le 30-08-2002 à 10:15:05
Reply
Marsh Posté le 30-08-2002 à 09:55:21
Bon j'ai un thread qui fait son run() .......... [ OK ]
je fais d'autre trucs .......................... [ OK ]
mon premier thread me dit qu'il a fini ......... [ OK ]
je fais quelques trucs ......................... [ OK ]
Je vérifie que mon premier est plus Alive ...... [ OK ]
Je refais un start() dessus .................... [ OK ]
après, je vérifie qu'il est Alive .............. [ OK ]
au début du run() de mon thread System.out ... [ FAILED ]
... bloquage de mon thread !
en gros j'appelle start() sur mon thread une première fois, ça marche, et la deuxième fois, il fout rien !!
? que passa doctor ?
pour être sûr d'être clair :
les deux affichage marchent à tous les coups (false et true)
l'affichage marche la première fois, mais la deuxième, et il litérallement bloqué !
Message édité par bobuse le 30-08-2002 à 10:16:17