Timer dispose de deux modes d'exécution des tâches. Le plus couramment utilisé est le planning, qui permet d'exécuter les tâches de deux manières : 1 : à une certaine heure (Data), 2 : après une heure fixe (int delay). Ces deux modes peuvent être spécifiés. fréquence d'exécution des tâches de l'une des manières suivantes. Regardons un exemple simple :
Copiez le code comme suit :
importer java.io.IOException ;
importer java.util.Timer ;
classe publique TimerTest {
public static void main (String[] args){
Minuterie timer = new Timer();
timer.schedule(new MyTask(), 1000, 2000); //Exécuter cette tâche après 1 seconde, avec un intervalle de 2 secondes à chaque fois. Si vous passez un paramètre Data, vous pouvez exécuter cette tâche à une heure fixe.
while(true){//Ceci est utilisé pour arrêter cette tâche, sinon il continuera à exécuter cette tâche en boucle
essayer {
int ch = System.in.read();
si(ch-'c'==0){
timer.cancel();//Utilisez cette méthode pour quitter la tâche
}
} catch (IOException e) {
// TODO Bloc catch généré automatiquement
e.printStackTrace();
}
}
}
la classe statique MyTask étend java.util.TimerTask{
@Outrepasser
public void run() {
// TODO Stub de méthode généré automatiquement
System.out.println("________");
}
}
}
Si vous utilisez JDK 5+, un mode ScheduleAtFixedRate est également disponible. Dans ce mode, le minuteur fera de son mieux pour exécuter la tâche à une fréquence fixe. Par exemple : dans l'exemple ci-dessus, nous voulons que MyTask s'exécute à chaque fois après 1 seconde. est exécuté une fois toutes les deux secondes, mais comme Java n'est pas en temps réel (en fait, les performances en temps réel de Java sont très mauvaises...), donc je La signification originale exprimée dans le programme précédent ne peut pas être strictement implémentée. Si nous appelons ScheduleAtFixedRate, alors Timer essaiera de maintenir la fréquence d'exécution de votre tâche toutes les 2 secondes. Exécutez le programme ci-dessus, en supposant que vous utilisez ScheduleAtFixedRate, puis le. Le scénario suivant est possible : Après 1 seconde, MyTask Exécuté une fois, car le système est occupé, MyTask peut être exécuté une seconde fois après 2,5 secondes. Ensuite, Timer enregistre ce délai et tente de rattraper ce délai dans la tâche suivante. Ensuite, après 1,5 seconde, MyTask sera exécuté. Trois fois. "Exécuter une tâche à une fréquence fixe plutôt qu'à un délai fixe"
Voici un exemple plus compliqué, qui vous indique comment quitter une seule TimerTask et comment quitter toutes les tâches.
Copiez le code comme suit :
package MyTimerTest ;
importer java.io.IOException ;
importer java.util.Timer ;
/*
* Cette classe donne les principales méthodes d'utilisation de Timer et TimerTaske, y compris la personnalisation des tâches et l'ajout de tâches
* Quittez la tâche et quittez le minuteur.
* Étant donné que le champ d'état de TimerTask est accessible au niveau du package, il n'y a aucun moyen d'y accéder en dehors du package java.util.
* Obtenir son statut, ce qui cause certains désagréments à la programmation. Nous ne pouvons pas juger du statut d'une certaine tâche.
*
*/
classe publique TimerTest {
public static void main (String[] arguments) {
Minuterie timer = new Timer();
MaTâche maTâche1 = new MaTâche();
MaTâche maTâche2 = new MaTâche();
maTâche2.setInfo("maTâche-2");
timer.schedule (ma Tâche1, 1000, 2000);
timer.scheduleAtFixedRate(maTâche2, 2000, 3000);
tandis que (vrai) {
essayer {
octet[] info = nouvel octet[1024];
int len = System.in.read(info);
String strInfo = new String(info, 0, len, "GBK");//Lire les informations depuis la console
if (strInfo.charAt(strInfo.length() - 1) == ' ') {
strInfo = strInfo.substring(0, strInfo.length() - 2);
}
if (strInfo.startsWith("Cancel-1")) { myTask1.cancel();//Quitter une seule tâche
//En fait, il faut juger ici si myTask2 s'est également terminé. Si c'est le cas, il devrait se briser. Mais parce qu'il ne peut pas être obtenu en dehors du package.
//Le statut de myTask2, donc aucun jugement ne peut être fait ici sur l'opportunité de quitter la boucle.
} sinon if (strInfo.startsWith("Cancel-2")) {
maTâche2.cancel();
} else if (strInfo.startsWith("Cancel-All")) {
timer.cancel();//Quitter la minuterie
casser;
} autre {
// Ne portez des jugements que sur myTask1, soyez paresseux ^_^
maTâche1.setInfo(strInfo);
}
} catch (IOException e) { // TODO Bloc catch généré automatiquement
e.printStackTrace();
}
}
}
la classe statique MyTask étend java.util.TimerTask {
Informations sur la chaîne = "^_^" ;
@Outrepasser
public void run() {
// TODO Stub de méthode généré automatiquement
System.out.println(infos);
}
chaîne publique getInfo() {
renvoyer des informations ;
}
public void setInfo (informations sur la chaîne) {
this.info = infos ;
}
}
}