Maison  >  Article  >  Java  >  Exemples de minuteries et de tâches planifiées en Java

Exemples de minuteries et de tâches planifiées en Java

Y2J
Y2Joriginal
2017-05-16 09:55:591760parcourir

Cet article présente principalement des exemples de minuteries Timer et TimerTask et de tâches planifiées en Java. Il est d'une grande valeur pratique. Les amis dans le besoin peuvent s'y référer

Ces deux classes sont très pratiques à utiliser et peuvent être complétées. la plupart de nos besoins en timers

La classe Timer est une classe utilisée pour exécuter des tâches. Elle accepte une TimerTask comme paramètre

Timer a deux modes d'exécution de tâches, le plus couramment utilisé est le suivant. planning, qui peut exécuter des tâches de deux manières : 1 : à une certaine heure (Data), 2 : après une heure fixe (int delay). Les deux méthodes peuvent spécifier la fréquence d'exécution des tâches

TimerTest.Java :

package com.cn; 
import java.io.IOException; 
import java.util.Timer; 
  
public class TimerTest{   
      
  public static void main(String[] args){   
    Timer timer = new Timer();   
    timer.schedule(new MyTask(), 1000, 2000);//在1秒后执行此任务,每次间隔2秒执行一次,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.   
    while(true){//这个是用来停止此任务的,否则就一直循环执行此任务   
      try{   
        int in = System.in.read();  
        if(in == 's'){   
          timer.cancel();//使用这个方法退出任务   
          break; 
        }   
      } catch (IOException e){   
        // TODO Auto-generated catch block   
        e.printStackTrace();   
      }   
    }   
  }  
   
  static class MyTask extends java.util.TimerTask{   
    public void run(){   
      System.out.println("");   
    }   
  }  
}

Ce type d'exécution :

Imprimer "————" sur la console 1 seconde après le démarrage du programme
Deux intervalles Après quelques secondes, l'exécution( ) de MyTask est exécutée et "————" est imprimé
Cette boucle continue
Lorsque le caractère s est saisi sur la console, le timer annule le travail
Saute hors de toute la boucle
Le programme est terminé !

TimerTest2.java :

package com.cn; 
 
import java.io.IOException; 
import java.util.Date; 
import java.util.Timer; 
 
public class TimerTest2{   
    
  public static void main(String[] args){   
    Timer timer = new Timer();   
    MyTask myTask1 = new MyTask();   
    MyTask myTask2 = new MyTask();   
    myTask2.setInfo("myTask-info-2");   
     
    timer.schedule(myTask1, 1000, 2000); //任务1 一秒钟后执行,每两秒执行一次。  
    timer.scheduleAtFixedRate(myTask2, 2000, 3000);  //任务2 2秒后开始进行重复的固定速率执行(3秒钟重复一次) 
     
    while (true){   
      try{   
        //用来接收键盘输入的字符串 
        byte[] info = new byte[1024];   
        int len = System.in.read(info);  
         
        String strInfo = new String(info, 0, len, "GBK");//从控制台读出信息   
         
        if (strInfo.charAt(strInfo.length() - 1) == ' '){   
          strInfo = strInfo.substring(0, strInfo.length() - 2);   
        }  
         
        if (strInfo.startsWith("Cancel-1")){   
          myTask1.cancel();//退出任务1   
          // 其实应该在这里判断myTask2是否也退出了,是的话就应该break.但是因为无法在包外得到   
          // myTask2的状态,所以,这里不能做出是否退出循环的判断.   
        } else if (strInfo.startsWith("Cancel-2")){   
          myTask2.cancel(); //退出任务2  
        } else if (strInfo.startsWith("Cancel-All")){   
          timer.cancel();//退出Timer   
          break;   
        } else{   
          // 只对myTask1作出判断,偷个懒^_^   
          myTask1.setInfo(strInfo);   
        }   
      } catch (IOException e){   
        // TODO Auto-generated catch block   
        e.printStackTrace();   
      }   
    }   
  }   
  
  static class MyTask extends java.util.TimerTask{   
     
    String info = "INFO"; 
  
    @Override   
    public void run(){   
      // TODO Auto-generated method stub   
      System.out.println(new Date() + "   " + info);   
    }   
  
    public String getInfo(){   
      return info;   
    }   
    public void setInfo(String info){   
      this.info = info;   
    }   
  }   
   
}

Cette classe crée deux tâches planifiées mytask1 et mytask2

mytask1 task et exemple d'utilisation dans la classe TimerTest ci-dessus Idem. Autrement dit, la tâche spécifiée est planifiée pour être exécutée avec un délai fixe de manière répétée à partir du délai spécifié.

La tâche mytask2 est différente de l'utilisation ci-dessus timer.scheduleAtFixedRate est exécutée à l'aide de la méthode planningAtFixedRate() du timer. La méthode

scheduleAtFixedRate() est définie comme suit dans API1.6.0 :

Planifier la tâche spécifiée pour qu'elle commence à se répéter à l'heure spécifiée Exécuté à un taux fixe. Les exécutions ultérieures ont lieu à des intervalles approximativement fixes, séparés par la période spécifiée.

Des intervalles approximativement fixes signifient que dans une exécution à taux fixe, chaque exécution est planifiée par rapport à l'heure d'exécution initiale prévue. Si une exécution est retardée pour une raison quelconque (telle qu'un garbage collection ou une autre activité en arrière-plan), deux ou plusieurs exécutions se succéderont rapidement, permettant aux exécutions suivantes de rattraper leur retard.

Autres méthodes couramment utilisées de la classe Timer :

cancel()

Terminez ce minuteur, en supprimant toutes les tâches actuellement planifiées.

purge()

Supprime toutes les tâches annulées de la file d'attente des tâches de ce minuteur.

schedule(TimerTask task, Date time)

Planifier l'exécution de la tâche spécifiée à l'heure spécifiée.

Autres méthodes couramment utilisées de la classe TimerTask :

cancel()

Annulez cette tâche du minuteur.

run()

L'opération à effectuer par cette tâche de minuterie.

scheduledExecutionTime()

Renvoie l'heure d'exécution planifiée de l'exécution réelle la plus récente de cette tâche.

【Recommandations associées】

1. Recommandation spéciale : Téléchargez la version V0.1 de "php Programmer Toolbox"

2. Tutoriel vidéo gratuit Java

3 Manuel du didacticiel JAVA

.

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