Bonjour, je cherche comment mettre en pause un thread indéfiniment jusqu'à ce que un autre thread le réveille.
Voici ou j'en suis dans mes investigations :
Avec sleep() :
- La méthode sleep() ne permet pas de faire une pause infinie.
- Toutefois je peux utiliser sleep() avec un nombre vraiment très grand, et pour réveiller le thread je fais un interrupt() dessus, cela est-il propre ?
Avec wait() :
- Le wait() ne fonctionne que dans un synchronized, or malgré la présence autour du wait d'un synchronized(object x), j'ai une IllegalMonitorStateException, pour la contrer j'ai donc mis dans l'en tête de la méthode run(), un synchronized, et la ça fonctionne.
- Pour réveiller d'un wait(), j'utilise aussi la méthode interrupt(), car je n'ai pas envie de mettre mes threads appelant le notify() en synchronized.
D'où ma seconde question, pourquoi le thread appelant wait() ou notify() doit-il lui-même être en synchronized ?
Ce synchronized sur le thread ne change rien sur les autres méthodes du thread ? (je suppose que non vu qu'une méthode appliquée sur un thread s'exécute en fait dans le thread appelant).
Merci pour vos réponses.
Siron
Message édité par Siron le 03-11-2008 à 14:03:04