定時器的應用
1、 定時器主要涉及到兩個類( java.util 包中)
@-》 public class Timer extends Object
(一種工具,線程用其安排以后在后臺線程中執行的任務。可安排任務執行一次,或者定期重復執行。 )
@--> public abstract class TimerTask extends Object implements Runnable
(由 Timer 安排為一次執行或重復執行的任務。)
2、
Timer類的構造方法:
構造方法摘要 |
|
Timer
()
|
|
Timer
(booleanisDaemon)
|
|
|
|
Timer
(
String
name, booleanisDaemon)
|
|
|
|
與每個 Timer 對象相對應的是單個后臺線程,用于順序地執行所有計時器任務。
計時器任務應該迅速完成。如果完成某個計時器任務的時間太長,那么它會“獨占”計時器的任務執行線程。因此,這就可能延遲后續任務的執行,而這些任務就可能“堆在一起”,并且在上述不友好的任務最終完成時才能夠被快速連續地執行。
對 Timer 對象最后的引用完成后, 并且 所有未處理的任務都已執行完成后,計時器的任務執行線程會正常終止(并且成為垃圾回收的對象)。但是這可能要很長時間后才發生。
默認情況下,任務執行線程并不作為 守護線程 來運行,所以它能夠阻止應用程序終止。如果調用者想要快速終止計時器的任務執行線程,那么調用者應該調用計時器的 cancel 方法。
如果意外終止了計時器的任務執行線程,例如調用了它的 stop 方法,那么所有以后對該計時器安排任務的嘗試都將導致 IllegalStateException ,就好像調用了計時器的 cancel 方法一樣。
此類是線程安全的:多個線程可以共享單個 Timer 對象而無需進行外部同步。
此類 不 提供實時保證:它使用 Object.wait(long) 方法來安排任務。
實現注意事項:此類可擴展到大量同時安排的任務(存在數千個都沒有問題)。在內部,它使用二進制堆來表示其任務隊列,所以安排任務的開銷是 O(log n),其中 n 是同時安排的任務數。
實現注意事項:所有構造方法都啟動計時器線程。
方法摘要 |
|
void |
cancel
()
|
int |
purge
()
|
void |
|
void |
schedule
(
TimerTask
task,
Date
firstTime, longperiod)
|
void |
|
void |
schedule
(
TimerTask
task, longdelay, longperiod)
|
void |
scheduleAtFixedRate
(
TimerTask
task,
Date
firstTime, longperiod)
|
void |
scheduleAtFixedRate
(
TimerTask
task, longdelay, longperiod)
|
3、TimerTask類的構造方法:
構造方法摘要 |
|
protected |
TimerTask
()
|
方法摘要 |
|
boolean |
cancel
()
|
abstract void |
run
()
|
long |
scheduledExecutionTime
()
|
實例1:
import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class TimerTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //每隔10s打印"hello,honey!"; new Timer().schedule(new TimerTask(){ @Override public void run() { // TODO Auto-generated method stub System.out.println("hello,honey!"); } }, 10000); while(true){ System.out.println(new Date().getSeconds());//打印當前秒數 try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
實例2:
import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class TimerTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //每隔10s打印"hello,honey!"; new Timer().schedule(new TimerTask(){ @Override public void run() { // TODO Auto-generated method stub System.out.println("hello,honey!"); } }, 10000,3000);//10s后打印,以后每隔3s打印一次 /*while(true){ System.out.println(new Date().getSeconds());//打印當前秒數 try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }*/ } }
運行結果:
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
