Maison  >  Article  >  Java  >  Comment utiliser le minuteur Java

Comment utiliser le minuteur Java

小云云
小云云original
2017-12-06 09:04:252956parcourir

La fonction de minuterie déclenche à plusieurs reprises l'événement de minuterie de la fenêtre spécifiée dans l'intervalle de temps spécifié. Syntaxe Timer (interval {, windowname }) Paramètre interval : Spécifiez l'intervalle de temps entre le déclenchement de l'événement Timer deux fois. La valeur valide est comprise entre 0 et 65. Cet article présente principalement en détail l'utilisation de Java timer Timer, qui a une certaine valeur de référence. Les amis intéressés peuvent s'y référer.

La fonction de tâche planifiée en Java utilise principalement l'objet Timer, qui utilise le multi-threading pour le traitement en interne, elle est donc toujours très étroitement liée à la technologie multi-threading. Dans le JDK, la classe Timer est principalement responsable de la fonction de planification des tâches, c'est-à-dire du démarrage d'une tâche à une heure spécifiée, mais la classe qui encapsule la tâche est la classe TimerTask.

Personnalisez la tâche à effectuer en héritant de la classe TimerTask et en implémentant la méthode run() :

public class Mytask extends TimerTask {
  @Override
  public void run()
  {
    DateFormat dateFormat = TimeUtil.df.get();
    System.out.println("我的任务运行了" + dateFormat.format(new Date()));
  }
}

Exécutez la tâche au moment de l'exécution en exécutant Timer.schedule(TimerTask task,Date time) :

public class Run {
  private static Timer timer=new Timer();

  public static void main(String[] args) throws ParseException
  {
    timer.schedule(new Mytask(), TimeUtil.df.get().parse("2017-09-14 09:19:30"));
  }
}

Remarque : classe d'outil de conversion de temps pour garantir sécurité des fils :

public class TimeUtil
{
  public static final ThreadLocal<DateFormat> df = new ThreadLocal<DateFormat>() {
    @Override
    protected DateFormat initialValue() {
      return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    }
  };
}

2. Notes sur la classe Timer

1. L'objet est un nouveau Un thread est démarré, mais ce thread nouvellement démarré n'est pas un thread démon. Il a été exécuté en arrière-plan. Vous pouvez définir le thread Timer nouvellement démarré comme thread démon comme suit.

private static Timer timer=new Timer(true);

2. Avance : lorsque l'heure prévue est antérieure à l'heure actuelle, la tâche sera exécutée immédiatement.

3. Délai : TimerTask est exécuté séquentiellement un par un dans une file d'attente, de sorte que le temps d'exécution peut ne pas être cohérent avec le temps prévu, car la tâche précédente peut prendre plus de temps et les tâches suivantes Le temps d'exécution sera être retardé. L'heure de début spécifique de la tâche retardée est basée sur "l'heure de fin" de la tâche précédente

4. Opération périodique : Timer.schedule (Tâche TimerTask, Date firstTime, longue période) Exécutez la tâche toutes les périodes en millisecondes à partir de firstTime :

5. planning (tâche TimerTask, long délai) L'heure actuelle est l'heure de référence et le délai est. en fonction de ce temps Exécuter une tâche TimerTask après le nombre de millisecondes spécifié.

6. Calendrier (tâche TimerTask, long délai, longue période) L'heure actuelle est l'heure de référence. Sur cette base, le nombre spécifié de millisecondes est retardé, puis une certaine tâche est exécutée un nombre illimité de. fois à un certain intervalle.

7. Quelle est la différence entre Cancel() de Timer et Cancel() de TimerTask ?

Comme mentionné précédemment, les tâches sont exécutées séquentiellement une par une dans une file d'attente. TimerTask.cancel() fait référence à l'annulation de la tâche en cours de la file d'attente des tâches. La valeur de Timer.cancel() est d'annuler toutes les tâches de la file d'attente des tâches actuelle. Il convient de noter que Cancel() de Timer n'arrête parfois pas nécessairement l'exécution de la tâche planifiée, mais l'exécute normalement. En effet, la méthode Cancel() de la classe Timer n'entre parfois pas en compétition pour le verrouillage de la file d'attente, de sorte que les tâches de la classe TimerTask continuent de s'exécuter normalement.

3. La différence entre planningAtFixedRate(Tâche TimerTask, Date firstTime, longue période) et planning (Tâche TimerTask, Date firstTime, longue période)

Mêmes points :

1. La méthode planning et la méthode planningAtFixedRate seront exécutées dans l'ordre, il n'est donc pas nécessaire de prendre en compte la sécurité des non-threads.

2. Méthode planning et méthode planningAtFixedRate Si le temps d'exécution de la tâche n'est pas retardé, alors le temps d'exécution de la tâche suivante est calculé en référence à l'heure de "début" de la tâche précédente.

3. Planification de la méthode et planification de la méthodeAtFixedRate Si le temps d'exécution de la tâche est retardé, alors le temps d'exécution de la tâche suivante est calculé en référence à l'heure à laquelle la tâche précédente s'est "terminée".

Différences :

Il n'y a fondamentalement aucune différence d'utilisation entre le calendrier de la méthode et la méthode. ScheduleAtFixedRate , c'est-à-dire que ScheduleAtFixedRate a une exécution de rattrapage. Qu'est-ce que cela signifie ? Autrement dit, si une tâche est interrompue lors d'une exécution périodique, planningAtFixedRate tentera de rattraper les tâches précédemment abandonnées. Ignorez le calendrier et exécutez simplement la tâche suivante. Vous pouvez vous référer à ce blog, qui est très vivant.

Le contenu ci-dessus explique comment utiliser Java timer Timer. J'espère que cela pourra aider tout le monde.

Recommandations associées :

Introduction à l'exemple de minuterie C# timer

Explication détaillée de l'utilisation de Timer en C# et résolution du problème de réentrance

Explication détaillée du timer Java (Timer, TimerTask) et exemple de code

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn