Java Timer, TimerTask, Tutorial Kelas Pengingat dengan Contoh
Diterbitkan: 2021-02-04
java.util.Timer
adalah kelas utilitas yang dapat digunakan untuk menjadwalkan thread yang akan dieksekusi pada waktu tertentu di masa mendatang. Kelas Java Timer dapat digunakan untuk menjadwalkan tugas yang akan dijalankan satu kali atau dijalankan secara berkala.
java.util.TimerTask
adalah kelas abstrak yang mengimplementasikan antarmuka Runnable dan kita perlu memperluas kelas ini untuk membuat TimerTask kita sendiri yang dapat dijadwalkan menggunakan kelas Java Timer .
Kelas Timer aman untuk utas dan beberapa utas dapat berbagi satu objek Timer tanpa perlu sinkronisasi eksternal. Kelas Timer menggunakan java.util.TaskQueue untuk menambahkan tugas pada interval reguler yang diberikan dan kapan saja hanya ada satu utas yang menjalankan TimerTask, misalnya jika Anda membuat Timer untuk dijalankan setiap 10 detik tetapi eksekusi utas tunggal membutuhkan waktu 20 detik, kemudian objek Timer akan terus menambahkan tugas ke antrian dan segera setelah satu utas selesai, itu akan memberi tahu antrian dan utas lain akan mulai dieksekusi.

Kelas timer menggunakan metode Object wait and notify untuk menjadwalkan tugas. TimerTask adalah abstract class
dan kami mewarisinya untuk menyediakan implementasi konkret. Kelas TimerTask implements
interface
Runnable
sehingga merupakan utas dan karenanya implementasi TimerTask Anda juga merupakan utas.
Timer dan TimerTask yang sangat sederhana Contoh: Tugas dijalankan setelah 5 seconds
berlalu.
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" ) ; } } |
Hasil:
1 2 |
Task scheduled . . Now wait for 5 sec to see next message . . Time ' s up ! |
Program sederhana ini mengilustrasikan bagian-bagian dasar berikut dari implementasi dan penjadwalan tugas yang akan dieksekusi oleh utas pengatur waktu:
- Terapkan subkelas khusus
TimerTask
. Metoderun
berisi kode yang melakukan tugas. Dalam contoh ini, subkelasnya bernama CrunchifyReminder. - Buat utas dengan membuat instance kelas
Timer
. - Buat instance objek
TimerTask
(new CrunchifyReminder()
). - Jadwalkan tugas pengatur waktu untuk dieksekusi.
Bagaimana saya bisa melakukan TimerTask ini Berulang kali?
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" ) ; } } |
Hasil:
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 . . ! |
Secara default, sebuah program terus berjalan selama utas timernya berjalan. Anda dapat menghentikan utas pengatur waktu dengan empat cara:

- Minta
cancel
pada penghitung waktu. Anda dapat melakukan ini dari mana saja dalam program, seperti dari metoderun
tugas pengatur waktu. - Jadikan utas timer sebagai "daemon" dengan membuat timer seperti ini:
new Timer(true)
. Jika satu-satunya utas yang tersisa dalam program adalah utas daemon, program akan keluar. - Setelah semua tugas terjadwal timer selesai dieksekusi, hapus semua referensi ke objek
Timer
. Akhirnya, utas pengatur waktu akan berakhir. - Aktifkan metode
System.exit
, yang membuat seluruh program (dan semua utasnya) keluar.