1. Concept
La fonction de tâche planifiée chronométrée utilise principalement un objet Timer dans Java, qui utilise le multi-threading en interne pour le traitement, il est donc toujours très lié à la technologie multi-threading. Dans JDK, la classe TIMER est principalement responsable de la fonction de planification des tâches, c'est-à-dire commencer à exécuter une certaine tâche à un moment spécifié, mais la classe qui résume la tâche est la classe TIMERTASK.
Personnalisez la tâche à exécuter en héritant de la classe TIMERTASK et en implémentant la méthode run ():
La classe publique MyTask étend TimeMtask {@Override public void run () {dateFormat dateFormat = timeUtil.df.get (); System.out.println ("Ma tâche est en cours d'exécution" + dateformat.format (new Date ())); }}Exécutez la tâche à l'heure d'exécution en exécutant TIMER.SCHEDULE (tâche TIMERTASK, date de date):
classe publique run {private static timer timer = new Timer (); public static void main (String [] args) lève ParseException {timer.schedule (new MyTask (), timeUtil.df.get (). Parse ("2017-09-14 09:19:30")); }}Remarque: la classe d'outils de conversion temporelle garantit la sécurité du thread:
classe publique TimeUtil {public static final threadLocal <AteFormat> df = new ThreadLocal <AteFormat> () {@Override Protected DateFormat InitialValue () {return new SimpledateFormat ("yyyy-mm-dd hh: mm: ss"); }};} 2. Précautions de classe de minuterie
1. Créer un objet Timer signifie qu'un nouveau thread est démarré, mais le fil nouvellement démarré n'est pas un thread de démon. Il a fonctionné en arrière-plan. Le fil de minuterie nouvellement démarré peut être défini comme un fil de démon à travers les éléments suivants.
Timer de temporisation statique privée = nouveau temporisateur (true);
2. À l'avance: lorsque l'heure prévue est antérieure à l'heure actuelle, la tâche sera exécutée immédiatement.
3. Delay: Timertask est exécuté un par un dans une file d'attente, de sorte que le temps d'exécution peut être incompatible avec le temps que vous attendez, car la tâche précédente peut prendre beaucoup de temps et le temps d'exécution de la tâche suivante sera retardé. L'heure de début spécifique de la tâche retardée est basée sur le "temps de fin" de la tâche précédente.
4. Opération périodique: Timer.Schedule (tâche Timertask, date de première fois, longue période) À partir de la première fois, les tâches sont exécutées toutes les millisecondes de période:
5. Planification (tâche Timemertass, long retard) L'heure actuelle est l'heure de référence. Après avoir retardé le numéro défini de millisecondes à ce moment-là, la tâche Timertask est exécutée.
6. Planification (tâche Timemers, long délai, longue période) L'heure actuelle est l'heure de référence. Sur cette base, retardez le nombre défini de millisecondes, puis exécutez une tâche avec un nombre infini de fois à un certain intervalle.
7. Quelle est la différence entre le Timer's Cancel () et le Timertask's Cancel ()?
L'exécution des tâches mentionnées précédemment est exécutée une par une sous forme de colonnes. TIMERTASK.CANCEL () fait référence à l'annulation de la tâche actuelle de la tâche à colonne. La valeur de Timer.Cancel () consiste à annuler toutes les tâches dans la file d'attente de tâches actuelle. Il convient de noter que Timer's Cancel () n'arrête parfois pas nécessairement d'exécuter des tâches planifiées, mais les exécute normalement. En effet, la méthode Cancel () dans la classe TIMER ne rivalise parfois pas pour le verrouillage de la file d'attente, de sorte que les tâches de la classe Tirmertask continuent d'être exécutées normalement.
3. La différence entre ScheduleAtFixeDrate (tâche Timertask, date de première fois, longue période) et calendrier (tâche Timertask, date de première fois, longue période)
Similitudes:
1. Le calendrier de la méthode et la méthode ScheduleAtFixeDrate sont exécutés dans l'ordre, de sorte que des situations de sécurité non-thread ne sont pas requises.
2. Planification de la méthode et méthode ScheduleAtFixeDrate Si l'heure d'exécution d'une tâche n'est pas retardée, le temps d'exécution de la tâche suivante est calculé en fonction de l'heure au "démarrage" de la tâche précédente.
3. Planification de la méthode et méthode ScheduleAtFixeDrate Si l'heure d'exécution d'une tâche est retardée, le temps d'exécution de la tâche suivante est calculé en se référant à l'heure à la fin de la dernière tâche.
Différences:
Il n'y a essentiellement aucune différence entre le calendrier de méthode et la méthode ScheduleAtFixeDrate dans l'utilisation, c'est-à-dire que ScheduleAtFixeDrate a une exécution de rattrapage. Qu'est-ce que ça veut dire? Autrement dit, si la tâche est interrompue pendant le fonctionnement périodique, ScheduleAtFixeDrate essaiera de remplir les tâches précédemment supprimées. Et le calendrier est ignoré, puis exécutez la tâche suivante. Vous pouvez vous référer à ce blog, qui est écrit de façon vivante.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.