Java Timer, TimerTask, Reminder Class Tutorial mit Beispiel
Veröffentlicht: 2021-02-04
java.util.Timer
ist eine Hilfsklasse, die verwendet werden kann, um einen Thread so zu planen, dass er zu einem bestimmten Zeitpunkt in der Zukunft ausgeführt wird. Die Java-Timer-Klasse kann verwendet werden, um eine Aufgabe so zu planen, dass sie einmalig oder in regelmäßigen Abständen ausgeführt wird.
java.util.TimerTask
ist eine abstrakte Klasse, die eine Runnable-Schnittstelle implementiert, und wir müssen diese Klasse erweitern, um unsere eigene TimerTask zu erstellen, die mit der Java-Timer -Klasse geplant werden kann.
Die Timer-Klasse ist Thread-sicher, und mehrere Threads können ein einzelnes Timer-Objekt gemeinsam nutzen, ohne dass eine externe Synchronisierung erforderlich ist. Die Timer-Klasse verwendet java.util.TaskQueue, um Aufgaben in bestimmten regelmäßigen Intervallen hinzuzufügen, und es kann jederzeit nur einen Thread geben, der die TimerTask ausführt, z. B. wenn Sie einen Timer erstellen, der alle 10 Sekunden ausgeführt wird, aber die Ausführung eines einzelnen Threads 20 Sekunden dauert. dann fügt das Timer-Objekt weiterhin Aufgaben zur Warteschlange hinzu und sobald ein Thread beendet ist, benachrichtigt es die Warteschlange und ein anderer Thread beginnt mit der Ausführung.

Die Timer-Klasse verwendet Object Wait- und Notification-Methoden, um die Aufgaben zu planen. TimerTask ist eine abstract class
und wir erben sie, um eine konkrete Implementierung bereitzustellen. Die TimerTask-Klasse implements
Runnable
interface
, sodass es sich um einen Thread handelt, und daher ist Ihre Implementierung von TimerTask auch ein Thread.
Sehr einfaches Beispiel für Timer und TimerTask: Task wird ausgeführt, sobald 5 seconds
vergangen sind.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
package com . crunchify . tutorials ; import java . util . Timer ; import java . util . TimerTask ; /** * Author: Crunchify.com */ public class CrunchifyTimerTaskExample { Timer timer ; public CrunchifyTimerTaskExample ( int seconds ) { timer = new Timer ( ) ; timer . schedule ( new CrunchifyReminder ( ) , seconds * 1000 ) ; } class CrunchifyReminder extends TimerTask { public void run ( ) { System . out . format ( "Timer Task Finished..!%n" ) ; timer . cancel ( ) ; // Terminate the timer thread } } public static void main ( String args [ ] ) { new CrunchifyTimerTaskExample ( 5 ) ; System . out . format ( "Task scheduled.. Now wait for 5 sec to see next message..%n" ) ; } } |
Ergebnis:
1 2 |
Task scheduled . . Now wait for 5 sec to see next message . . Time ' s up ! |
Dieses einfache Programm veranschaulicht die folgenden grundlegenden Teile der Implementierung und Planung einer Aufgabe, die von einem Timer-Thread ausgeführt werden soll:
- Implementieren Sie eine benutzerdefinierte Unterklasse von
TimerTask
. Dierun
-Methode enthält den Code, der die Aufgabe ausführt. In diesem Beispiel heißt die Unterklasse CrunchifyReminder. - Erstellen Sie einen Thread, indem Sie die
Timer
-Klasse instanziieren. - Instanziieren Sie das
TimerTask
Objekt (new CrunchifyReminder()
). - Planen Sie die Timer-Aufgabe zur Ausführung.
Wie kann ich diese TimerTask wiederholt ausführen?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
package crunchify . com . tutorials ; import java . util . Timer ; import java . util . TimerTask ; import java . awt . Toolkit ; /** * Author: Crunchify.com * Java Timer and TimerTask - Reminder Class Tutorials */ public class CrunchifyTimerTaskExample { // Toolkit This class is the abstract superclass of all actual implementations of the Abstract Window Toolkit. // Subclasses of the Toolkit class are used to bind the various components to particular native toolkit implementations. Toolkit toolkit ; // Timer A facility for threads to schedule tasks for future execution in a background thread. // Tasks may be scheduled for one-time execution, or for repeated execution at regular intervals. Timer timer ; public CrunchifyTimerTaskExample ( ) { toolkit = Toolkit . getDefaultToolkit ( ) ; timer = new Timer ( ) ; // schedule() Schedules the specified task for repeated fixed-delay execution, beginning after the specified delay. // Subsequent executions take place at approximately regular intervals separated by the specified period. timer . schedule ( new CrunchifyReminder ( ) , 0 , // initial delay 1 * 1000 ) ; // subsequent rate } // TimerTask A task that can be scheduled for one-time or repeated execution by a Timer. // A timer task is not reusable. Once a task has been scheduled for execution on a Timer or cancelled, // subsequent attempts to schedule it for execution will throw IllegalStateException. class CrunchifyReminder extends TimerTask { int loop = 5 ; public void run ( ) { if ( loop > 0 ) { // beep() Emits an audio beep depending on native system settings and hardware capabilities. toolkit . beep ( ) ; System . out . format ( "Knock Knock..!\n" ) ; loop -- ; } else { toolkit . beep ( ) ; System . out . format ( "\nThat's it.. Done..!" ) ; // cancel() Terminates this timer, discarding any currently scheduled tasks. Does not interfere with a currently executing task (if it exists). Once a timer has been terminated, // its execution thread terminates gracefully, and no more tasks may be scheduled on it. timer . cancel ( ) ; } } } public static void main ( String args [ ] ) { new CrunchifyTimerTaskExample ( ) ; System . out . format ( "Task scheduled..!%n \n" ) ; } } |
Ergebnis:
1 2 3 4 5 6 7 8 9 |
Task scheduled . . ! Knock Knock . . ! Knock Knock . . ! Knock Knock . . ! Knock Knock . . ! Knock Knock . . ! That ' s it . . Done . . ! |
Standardmäßig wird ein Programm so lange ausgeführt, wie seine Timer-Threads ausgeführt werden. Sie können einen Timer-Thread auf vier Arten beenden:

- Rufen Sie
cancel
für den Timer auf. Sie können dies von überall im Programm aus tun, z. B. von derrun
-Methode einer Timer-Aufgabe aus. - Machen Sie den Thread des Timers zu einem „Daemon“, indem Sie den Timer wie folgt erstellen:
new Timer(true)
. Wenn die einzigen im Programm verbleibenden Threads Daemon-Threads sind, wird das Programm beendet. - Nachdem alle geplanten Tasks des Timers ausgeführt wurden, entfernen Sie alle Verweise auf das
Timer
-Objekt. Schließlich wird der Thread des Zeitgebers beendet. - Rufen Sie die Methode
System.exit
auf, wodurch das gesamte Programm (und alle seine Threads) beendet werden.