Timer Java, TimerTask, Tutorial Clasa Memento cu Exemplu
Publicat: 2021-02-04
java.util.Timer
este o clasă de utilitate care poate fi folosită pentru a programa un fir de execuție pentru a fi executat la un anumit moment în viitor. Clasa Java Timer poate fi folosită pentru a programa o sarcină să fie executată o singură dată sau să fie rulată la intervale regulate.
java.util.TimerTask
este o clasă abstractă care implementează interfața Runnable și trebuie să extindem această clasă pentru a crea propriul nostru TimerTask care poate fi programat folosind clasa java Timer .
Clasa Timer este sigură pentru fire și mai multe fire pot partaja un singur obiect Timer fără a fi nevoie de sincronizare externă. Clasa Timer folosește java.util.TaskQueue pentru a adăuga sarcini la un interval regulat dat și în orice moment poate exista un singur fir care rulează TimerTask, de exemplu dacă creați un Timer care să ruleze la fiecare 10 secunde, dar executarea unui singur fir durează 20 de secunde, apoi obiectul Timer va continua să adauge sarcini la coadă și de îndată ce un fir de execuție este terminat, va notifica coada și un alt fir va începe să se execute.

Clasa Timer folosește metode Object wait și notify pentru a programa sarcinile. TimerTask este o abstract class
și o moștenim pentru a oferi implementare concretă. Clasa TimerTask implements
interface
Runnable
, deci este un fir și, prin urmare, implementarea dvs. a TimerTask este, de asemenea, un fir.
Timer și TimerTask foarte simplu Exemplu: Sarcina se execută după ce au trecut 5 seconds
.
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" ) ; } } |
Rezultat:
1 2 |
Task scheduled . . Now wait for 5 sec to see next message . . Time ' s up ! |
Acest program simplu ilustrează următoarele părți de bază ale implementării și programării unei sarcini care urmează să fie executată de un fir de cronometru:
- Implementați o subclasă personalizată de
TimerTask
. Metodarun
conține codul care realizează sarcina. În acest exemplu, subclasa este numită CrunchifyReminder. - Creați un fir prin instanțierea clasei
Timer
. - Instanciați obiectul
TimerTask
(new CrunchifyReminder()
). - Programați sarcina de cronometru pentru execuție.
Cum pot efectua acest TimerTask în mod repetat?
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" ) ; } } |
Rezultat:
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 . . ! |
În mod implicit, un program continuă să ruleze atâta timp cât se execută firele sale de timer. Puteți încheia un thread de temporizator în patru moduri:

- Invocați
cancel
pe cronometru. Puteți face acest lucru de oriunde în program, cum ar fi metoda derun
a unei sarcini de cronometru. - Faceți firul temporizatorului un „demon” creând cronometrul astfel:
new Timer(true)
. Dacă singurele fire rămase în program sunt fire daemon, programul se iese. - După ce toate sarcinile programate ale temporizatorului s-au încheiat, eliminați toate referințele la obiectul
Timer
. În cele din urmă, firul temporizatorului se va termina. - Invocați metoda
System.exit
, care face ca întregul program (și toate firele sale) să iasă.