新聞中心
Java下定時(shí)執(zhí)行任務(wù)的方法有哪些?
1)java.util.Timer
創(chuàng)新互聯(lián)"三網(wǎng)合一"的企業(yè)建站思路。企業(yè)可建設(shè)擁有電腦版、微信版、手機(jī)版的企業(yè)網(wǎng)站。實(shí)現(xiàn)跨屏營(yíng)銷(xiāo),產(chǎn)品發(fā)布一步更新,電腦網(wǎng)絡(luò)+移動(dòng)網(wǎng)絡(luò)一網(wǎng)打盡,滿足企業(yè)的營(yíng)銷(xiāo)需求!創(chuàng)新互聯(lián)具備承接各種類(lèi)型的做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)項(xiàng)目的能力。經(jīng)過(guò)十余年的努力的開(kāi)拓,為不同行業(yè)的企事業(yè)單位提供了優(yōu)質(zhì)的服務(wù),并獲得了客戶的一致好評(píng)。
這個(gè)方法應(yīng)該是最常用的,不過(guò)這個(gè)方法需要手工啟動(dòng)你的任務(wù):
Timer timer=new Timer();
timer.schedule(new ListByDayTimerTask(),10000,86400000);
這里的ListByDayTimerTask類(lèi)必須extends TimerTask里面的run()方法。
2)ServletContextListener
這個(gè)方法在web容器環(huán)境比較方便,這樣,在web server啟動(dòng)后就可以
自動(dòng)運(yùn)行該任務(wù),不需要手工操作。
將ListByDayListener implements ServletContextListener接口,在
contextInitialized方法中加入啟動(dòng)Timer的代碼,在contextDestroyed
方法中加入cancel該Timer的代碼;然后在web.xml中,加入listener:
詳細(xì)教程請(qǐng)參考:
在Java中如何設(shè)置一個(gè)定時(shí)任務(wù)的代碼應(yīng)該怎么寫(xiě)?
指定定時(shí)任務(wù)的代碼如下:
public void schedule(TimerTask task,Date time)
比如,我們希望定時(shí)任務(wù)2006年7月2日0時(shí)0分執(zhí)行,只要給第二個(gè)參數(shù)傳一個(gè)時(shí)間設(shè)置為2006年7月2日0時(shí)0分的Date對(duì)象就可以了.
有一種情況是,可能我們的程序啟動(dòng)的時(shí)候,已經(jīng)是2006年7月3日了,這樣的話,程序一啟動(dòng),定時(shí)任務(wù)就開(kāi)始執(zhí)行了.
schedule最后一個(gè)重載的方法是
public void schedule(TimerTask task,Date firstTime,long period)
既然號(hào)稱是定時(shí)任務(wù),我們肯定希望由我們來(lái)指定任務(wù)指定的時(shí)間,顯然上面的方法就不中用了,因?yàn)槲覀儾恢莱绦蚴裁磿r(shí)間開(kāi)始運(yùn)行,就沒(méi)辦法確定需要延時(shí)多少.沒(méi)關(guān)系,schedule四個(gè)重載的方法還沒(méi)用完呢.用下面這個(gè)就OK了。
Java 如何實(shí)現(xiàn)這樣的定時(shí)任務(wù)
JDK中,定時(shí)器任務(wù)的執(zhí)行需要兩個(gè)基本的類(lèi):
java.util.Timer;
java.util.TimerTask;
要運(yùn)行一個(gè)定時(shí)任務(wù),最基本的步驟如下:
1、建立一個(gè)要執(zhí)行的任務(wù)TimerTask。
2、創(chuàng)建一個(gè)Timer實(shí)例,通過(guò)Timer提供的schedule()方法,將 TimerTask加入到定時(shí)器Timer中,同時(shí)設(shè)置執(zhí)行的規(guī)則即可。
當(dāng)程序執(zhí)行了Timer初始化代碼后,Timer定時(shí)任務(wù)就會(huì)按照設(shè)置去執(zhí)行。
Timer中的schedule()方法是有多種重載格式的,以適應(yīng)不同的情況。該方法的格式如下:
void schedule(TimerTask task, Date time)
安排在指定的時(shí)間執(zhí)行指定的任務(wù)。
void schedule(TimerTask task, Date firstTime, long period)
安排指定的任務(wù)在指定的時(shí)間開(kāi)始進(jìn)行重復(fù)的固定延遲執(zhí)行。
void schedule(TimerTask task, long delay)
安排在指定延遲后執(zhí)行指定的任務(wù)。
void schedule(TimerTask task, long delay, long period)
安排指定的任務(wù)從指定的延遲后開(kāi)始進(jìn)行重復(fù)的固定延遲執(zhí)行。
Timer是線程安全的,此類(lèi)可擴(kuò)展到大量同時(shí)安排的任務(wù)(存在數(shù)千個(gè)都沒(méi)有問(wèn)題)。其所有構(gòu)造方法都啟動(dòng)計(jì)時(shí)器線程??梢哉{(diào)用cancel() 終止此計(jì)時(shí)器,丟棄所有當(dāng)前已安排的任務(wù)。purge()從此計(jì)時(shí)器的任務(wù)隊(duì)列中移除所有已取消的任務(wù)。此類(lèi)不提供實(shí)時(shí)保證:它使用 Object.wait(long) 方法來(lái)安排任務(wù)。
TimerTask是一個(gè)抽象類(lèi),由 Timer 安排為一次執(zhí)行或重復(fù)執(zhí)行的任務(wù)。它有一個(gè)抽象方法run()----計(jì)時(shí)器任務(wù)要執(zhí)行的操作。因此,每個(gè)具體的任務(wù)類(lèi)都必須繼承TimerTask類(lèi),并且重寫(xiě)run()方法。另外它還有兩個(gè)非抽象的方法:
boolean cancel()
取消此計(jì)時(shí)器任務(wù)。
long scheduledExecutionTime()
返回此任務(wù)最近實(shí)際 執(zhí)行的安排 執(zhí)行時(shí)間。
網(wǎng)頁(yè)標(biāo)題:java定時(shí)運(yùn)行代碼,定時(shí) java
網(wǎng)頁(yè)路徑:http://www.dlmjj.cn/article/hcphch.html