Comment arrêter immédiatement la tâche programmée en Java.util.Classe Timer
J'ai tout essayé. Trop Comment arrêter la tâche programmée en Java.util.Classe Timer
J'ai une tâche qui implémente java.util.TimerTask
J'appelle à ce que la tâche de 2 façons:
- Je programmateur comme ceci:
de la minuterie.annexe(timerTask, 60 * 1000);
- parfois j'ai besoin de ce travail pour commencer immédiatement et il doit annuler timerTask si il y a tout qui fonctionne
cancelCurrentWork();
minuterie.annexe(timerTask, 0);
Cette mise en œuvre n'a pas d'arrêt de travail actuel:
(documentation dit: Si la tâche est en cours d'exécution lors de cet appel se produit, la tâche sera exécutée à la fin, mais ne sera jamais à court de nouveau)
Mais j'en ai besoin pour arrêter.
public static void cancelCurrentwork() {
if (timerTask!= null) {
timerTask.cancel();
}
}
Cette mise en œuvre juste annule la minuterie, mais les feuilles en train de faire tâche d'être terminé.
public static void cancelCurrentwork() {
if (timer!= null) {
timer.cancel();
}
}
Est-il un moyen de minuterie pour l'ARRÊT de l'exécution de mon travail, quelque chose comme Thread.kill() ou quelque chose? Quand j'ai besoin de cette tâche à arrêter, je veux perdre toutes ses données.
OriginalL'auteur vale4674 | 2010-10-29
Vous devez vous connecter pour publier un commentaire.
Il n'existe aucun moyen de la Minuterie pour arrêter la tâche dans son élan.
Vous aurez besoin d'avoir un mécanisme distinct dans l'exécution de la tâche elle-même, qui vérifie si il faut garder en cours d'exécution. Vous pourriez par exemple avoir un
AtomicBoolean keepRunning
variable qui vous définie à false lorsque vous souhaitez que la tâche de mettre fin.Et autre question: est-ce une API comme ScheduledExecutorService ou quelque chose comme ça vous permet d'ARRÊTER la tâche?
Non, il vous suffit de retourner à partir de la
run
méthode.Oui ça ressemble à ça fera l'affaire. Mais ce n'est pas que "élégant". Parce que ma méthode run() ne contient que peu de méthodes et de chacun d'entre eux exigent des temps de travail. Certains d'entre eux n'ont pas de boucles while dans celle-ci, aux boolean constamment. Donc, comme vous voyez, j'en ai besoin pour arrêter immédiatement, et non pas après la tâche se rend compte que le booléen est définie sur false.
Si il y a un blocage de la méthode, vous devez
interrupt
.OriginalL'auteur aioobe
si le minuteur à l'aide de une sorte de fichier/socket etc, vous pouvez fermer cet objet à partir de l'extérieur de l'horloge et de la minuterie tâche va lever une exception, et vous pouvez l'utiliser pour arrêter la minuterie.
mais en général vous besoin d'une sorte de pilule empoisonnée pour réussir à arrêter un thread séparé/timer.
de toute façon je n'ai utilisé qu'une suggestion de aioobe, et je vérifie constamment mon drapeau et ensuite de retour à partir de "run" de la méthode.
OriginalL'auteur MeBigFatGuy