Java Timer, TimerTask, Örnekli Hatırlatma Sınıfı Eğitimi
Yayınlanan: 2021-02-04
java.util.Timer
, gelecekte belirli bir zamanda yürütülecek bir iş parçacığını programlamak için kullanılabilecek bir yardımcı program sınıfıdır. Java Timer sınıfı, bir görevi tek seferlik veya düzenli aralıklarla çalıştırılacak şekilde programlamak için kullanılabilir.
java.util.TimerTask
, Runnable arabirimini uygulayan soyut bir sınıftır ve Java Timer sınıfı kullanılarak planlanabilen kendi TimerTask'ımızı oluşturmak için bu sınıfı genişletmemiz gerekir.
Timer sınıfı iş parçacığı için güvenlidir ve birden çok iş parçacığı, harici senkronizasyona gerek kalmadan tek bir Timer nesnesini paylaşabilir. Timer sınıfı, belirli düzenli aralıklarla görevler eklemek için Java.util.TaskQueue kullanır ve herhangi bir zamanda TimerTask'ı çalıştıran yalnızca bir iş parçacığı olabilir, örneğin, her 10 saniyede bir çalışacak bir Zamanlayıcı oluşturuyorsanız ancak tek iş parçacığı yürütmesi 20 saniye sürüyorsa, daha sonra Timer nesnesi kuyruğa görevler eklemeye devam edecek ve bir iş parçacığı biter bitmez kuyruğa bildirecek ve başka bir iş parçacığı yürütülmeye başlayacaktır.

Timer sınıfı, görevleri zamanlamak için Object wait ve notify yöntemlerini kullanır. TimerTask abstract class
ve somut uygulama sağlamak için onu devralırız. TimerTask sınıfı, Runnable
interface
implements
, bu nedenle bir iş parçacığıdır ve bu nedenle TimerTask uygulamanız da bir iş parçacığıdır.
Çok basit Zamanlayıcı ve ZamanlayıcıGörevi Örnek: Görev, 5 seconds
geçtikten sonra yürütülür.
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" ) ; } } |
Sonuç:
1 2 |
Task scheduled . . Now wait for 5 sec to see next message . . Time ' s up ! |
Bu basit program, bir zamanlayıcı iş parçacığı tarafından yürütülecek bir görevi uygulamanın ve zamanlamanın aşağıdaki temel bölümlerini gösterir:
-
TimerTask
özel bir alt sınıfını uygulayın.run
yöntemi, görevi gerçekleştiren kodu içerir. Bu örnekte, alt sınıf CrunchifyReminder olarak adlandırılmıştır. -
Timer
sınıfını başlatarak bir iş parçacığı oluşturun. -
TimerTask
nesnesini örnekleyin (new CrunchifyReminder()
). - Yürütme için zamanlayıcı görevini zamanlayın.
Bu TimerTask'ı Tekrar Tekrar Nasıl Gerçekleştirebilirim?
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" ) ; } } |
Sonuç:
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 . . ! |
Varsayılan olarak, bir program, zamanlayıcı dizileri çalıştığı sürece çalışmaya devam eder. Bir zamanlayıcı dizisini dört şekilde sonlandırabilirsiniz:

- Zamanlayıcıda
cancel
çağırın. Bunu, bir zamanlayıcı görevininrun
yöntemi gibi programın herhangi bir yerinden yapabilirsiniz. - Zamanlayıcıyı şu şekilde oluşturarak zamanlayıcının iş parçacığını bir "arka plan programı" yapın:
new Timer(true)
. Programda kalan tek iş parçacığı daemon iş parçacığı ise, programdan çıkar. - Zamanlayıcının tüm zamanlanmış görevlerinin yürütülmesi tamamlandıktan sonra,
Timer
nesnesine yapılan tüm başvuruları kaldırın. Sonunda, zamanlayıcının iş parçacığı sona erecektir. - Tüm programın (ve tüm iş parçacıklarının) çıkmasını sağlayan
System.exit
yöntemini çağırın.