Anmerkung des Übersetzers: Ich persönlich denke, dass die Verwendung zeitgesteuerter Aufgaben zum Ausführen von Müllabfuhr kein gutes Beispiel ist. Daten, Dateien usw.
In diesem Artikel werde ich 3 verschiedene Implementierungsmethoden einführen:
1.. Gewöhnliche Thread -Implementierung
2. Timertask -Implementierung
3.. Implementierung von PlanedexecutorService
1. Gewöhnlicher Thread
Dies ist die häufigste Sache. Dies kann schnell und einfach implementiert werden. Der Code ist wie folgt:
Die Codekopie lautet wie folgt:
public class Task1 {
public static void main (String [] args) {
// in einer Sekunde laufen
Final Long TimeInterval = 1000;
Runnable runnable = new Runnable () {
public void run () {
while (wahr) {
// -------- Code für die Ausführung der Aufgabe
System.out.println ("Hallo !!");
// ---------- endet hier
versuchen {
Thread.sleep (timeInterval);
} catch (InterruptedException e) {
E. printstacktrace ();
}
}
}
};
Thread Thread = neuer Thread (runnable);
Thread.Start ();
}
}
2. Verwenden Sie Timer und Timertask
Die obige Implementierung ist sehr schnell und einfach, aber es fehlt auch einige Funktionen.
Im Vergleich zur obigen Methode hat die Verwendung von Timer und TimerTask die folgenden Vorteile:
1. kontrolliert beim Starten und Abbrechen von Aufgaben
2. Sie können die gewünschte Verzögerungszeit angeben, wenn Sie zum ersten Mal eine Aufgabe ausführen
Während der Implementierung kann die Timer -Klasse Aufgaben planen und TimerTask implementiert bestimmte Aufgaben in der Run () -Methode.
Timer-Instanzen können Multitasking planen, und es ist thread-sicher.
Wenn der Konstruktor des Timers aufgerufen wird, erstellt er einen Thread, mit dem Aufgaben geplant werden können.
Hier ist der Code:
Die Codekopie lautet wie folgt:
import Java.util.timer;
import Java.util.timertask;
public class Task2 {
public static void main (String [] args) {
TimerTask task = new timerTask () {
@Override
public void run () {
// Aufgabe zu laufen geht hier
System.out.println ("Hallo !!!");
}
};
Timer Timer = new Timer ();
lange Verzögerung = 0;
lange Periodeneriode = 1 * 1000;
// plant die Aufgabe, die in einem Intervall ausgeführt werden soll
Timer.Scheduleatfixedrat (Aufgabe, Verzögerung,
IntegerPeriode);
} // Ende des Haupts
}
Diese Klassen existieren seit JDK 1.3.
3.. ScheduledexecutorService
Plantedexecutorservice wurde als gleichzeitige Werkzeugkurs aus Java SE 5 Java.util.Concurrent eingeführt, der idealsten zeitgesteuerten Task -Implementierungsmethode.
Im Vergleich zu den beiden oben genannten Methoden hat es die folgenden Vorteile:
1. Im Vergleich zu Timer's Single Thread wird Aufgaben über einen Thread -Pool ausgeführt.
2. Sie können die Verzögerungszeit für die erste Aufgabenausführung festlegen
3.. Geben Sie gute Vereinbarungen zur Festlegung des Ausführungszeitintervalls vor
Das Folgende ist der Implementierungscode.
Die Codekopie lautet wie folgt:
import Java.util.concurrent.executors;
Import Java.util.Concurrent.ScheduledexecutorService;
Import Java.util.Concurrent.TimeUnit;
öffentliche Klasse Task3 {
public static void main (String [] args) {
Runnable runnable = new Runnable () {
public void run () {
// Aufgabe zu laufen geht hier
System.out.println ("Hallo !!");
}
};
Ungedutedexecutorservice Service = Executors
.NewsinglethreadScheduledexecutor ();
service.ScheduleatFixedRate (runnable, 0, 1, timeUnit.seconds);
}
}