J'ai une classe qui étend le fil. Ce fil lors de l'exécution dépense la majeure partie de son sommeil, il effectuera un chèque, si true Effectuera une action simple, puis dormez pendant 1/2 seconde et répétez.
La classe a également une méthode publique appelée par d'autres threads . Si cela s'appelle, je veux que le fil dorme plus longtemps s'il coule déjà ou dormez immédiatement si ce n'est pas le cas. J'ai essayé d'avoir cela.sleep mais il semble que cela dort toujours du fil actuel et qu'il se plaint que le sommeil de la méthode est statique et doit être accès statique. p>
Ce programme montre mon problème, lorsque CAUSELEP est appelé, je souhaite qu'il arrête d'imprimer des nombres jusqu'à ce que le sommeil soit terminé. p> La sortie que je reçois est p>
3 Réponses :
Vous ne pouvez pas dormir un autre fil. (Vous pouvez utiliser la méthode code> suspension () déprécée () code>, mais s'il vous plaît ne pas). Cet appel:
this.sleep(200);
En fait, pour dire au fil Maintenant, pour le faire Dormir immédiatement Strong>, vous devez interrompre le fil. Cela lancera une exception pour arrêter le traitement actuel. Maintenant, vous devez faire face à cela ... Pensez si c'est vraiment ce que vous voulez. P>
Une autre solution serait, dans l'activité du fil de fil normal, de sonder également la variable comme dans le premier cas et de dormir si elle est définie. Cela serait
Ajoutez ceci à votre fil: in dans l'autre Fil: P> exécuté () code>: p> synchronized (lock) {
try {
sleeper.waitLonger.set(true);
...
lock.notify();
sleeper.waitLonger.set(false);
}