定时器实现方式之TimerTask、Timer
在未來某個指定的時間點或者經(jīng)過一段時間延遲后執(zhí)行某個事件,這時候就需要用到定時器了。定時器的實現(xiàn)方式有很多種,今天總結(jié)最簡單的實現(xiàn)方式。java 1.3引入了定時器框架,用于在定時器上下文中控制線程的執(zhí)行,其由類Timer和TimerTask構(gòu)成。Timer適用于大規(guī)模并發(fā)調(diào)度定時任務,在內(nèi)部,該類使用二進制的堆表示其定時任務隊列。
通過繼承TimerTask或者創(chuàng)建匿名類的方式重寫run()方法,創(chuàng)建一個定時任務,通過將其作為第一個參數(shù)調(diào)用Timer得schedule()方法,實現(xiàn)定時器。
import java.util.Timer; import java.util.TimerTask;public class TimerDemo {// 通過創(chuàng)建匿名類方式實現(xiàn)public static void main(String[] args) {// 首先初始化一個TimerTask的匿名子類TimerTask task = new TimerTask() {@Overridepublic void run() {System.out.println("開始執(zhí)行");//退出程序返回最上層,0表示正常退出程序,非0表示非正常退出程序System.exit(0);}};//通過Timer調(diào)用Timer timer = new Timer();timer.schedule(task, 2000);} }
Timer創(chuàng)建的定時器一般為非線程守護,如果想要創(chuàng)建守護線程需調(diào)用Timer(boolean isDaemon) 傳遞參數(shù)true給isDaemon。
Timer類聲明的方法如下:
- void schedule(TimerTask task, long delay) 在delay毫秒之后調(diào)度任務執(zhí)行。
- void schedule(TimerTask task, Date time) 在某個時間點調(diào)度任務執(zhí)行。
- void schedule(TimerTask task, long delay, long period) 在delay毫秒之后調(diào)度任務開始執(zhí)行,以固定時間間隔的方式重復執(zhí)行,后續(xù)將一大約period毫秒的固定時間間隔執(zhí)行。
- void schedule(TimerTask task, Date firstTime, long period) 調(diào)度任務于firstTime開始,以固定時間間隔的方式重復執(zhí)行,后續(xù)將一大約period毫秒的固定時間間隔執(zhí)行。
- void scheduleAtFixedRate(TimerTask task, long delay, long period) 在delay毫秒之后,開始調(diào)度任務以固定速率的方式重復執(zhí)行,后續(xù)將以大約period毫秒數(shù)的固定時間間隔執(zhí)行。
-
void scheduleAtFixedRate(TimerTask task, Date firstTime,long period) 調(diào)度任務于firstTime開始,以固定速率的方式重復執(zhí)行,后續(xù)將大約period毫秒數(shù)的固定時間間隔執(zhí)行。
- sched(TimerTask task, long time, long period) 在指定時間執(zhí)行調(diào)度任務執(zhí)行,以固定時間間隔的方式重復執(zhí)行,后續(xù)將一大約period毫秒的固定時間間隔執(zhí)行。
- void cancel() 終止定時器,丟棄所有當前調(diào)度的定時器任務。不干涉當前正在執(zhí)行的任務,能保證正在執(zhí)行的任務一定是最后一個被該定時器執(zhí)行的任務。
- int purge() 從該定時器隊列中移除所有取消的定時任務并且返回被移除任務的數(shù)目。
定時任務都是抽象類TimerTask子類的實例,這些子類實現(xiàn)Runnable接口,當子類實例化TimerTask的時候,需要重寫其voud run()方法。
TimerTask類聲明的方法如下:
- boolean cancel()取消這個定時任務
- long scheduledExecutionTime() 返回此定時任務最近實際被調(diào)度執(zhí)行時間。
Timer的cancel()和TimerTask的TimerTask的區(qū)別在于,Timer的cancel()會終止定時器并放棄當前任意被調(diào)度的定時任務,而TimerTask的cancel()方法僅僅會取消正在調(diào)度的定時任務。
?
轉(zhuǎn)載于:https://www.cnblogs.com/Sweethoney/p/10486483.html
總結(jié)
以上是生活随笔為你收集整理的定时器实现方式之TimerTask、Timer的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 骚气女生网名66个
- 下一篇: 电脑和电脑用路由怎么连接 路由器连接后如