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

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