在大多數(shù)項(xiàng)目中,在特定的時(shí)間或頻率下你需要完成一些特定的任務(wù)。在本文中我們將演示如何用標(biāo)準(zhǔn)的Java Timer API來(lái)實(shí)現(xiàn)。
大多商業(yè)應(yīng)用都會(huì)用報(bào)表和統(tǒng)計(jì),很難想象沒(méi)有這些幫助我們分析未來(lái)趨勢(shì)的數(shù)據(jù),我們還要這系統(tǒng)干什么。問(wèn)題是如此多的數(shù)據(jù)我們?cè)撊绾斡|發(fā),如果處理對(duì)系統(tǒng)性能影響不大。比較好的方式是避開(kāi)應(yīng)用高峰,讓服務(wù)器在閑暇時(shí)完成這些事。
下面是我的程序:
package net.nighttale.scheduling;
/**
*
@author kevin zhou
*
* 在Java中實(shí)現(xiàn)Job Scheduling
* 創(chuàng)建日期 2004-7-13
*/
import java.util.TimerTask;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
public class ReportGenerator
extends TimerTask{
/* (非 Javadoc)
* @see java.util.TimerTask#run()
*/
public void run() {
System.out.println("Generating report");
}
}
class MainApplication {
public static void main(String[] args) {
Timer timer=
new Timer();
Calendar date = Calendar.getInstance();
date.set(
Calendar.DAY_OF_WEEK,
Calendar.SUNDAY
);
date.set(Calendar.HOUR, 0);
date.set(Calendar.MINUTE, 0);
date.set(Calendar.SECOND, 0);
date.set(Calendar.MILLISECOND, 0);
// Schedule to run every Sunday in midnight
timer.schedule(
new ReportGenerator(),
date.getTime(),
1000 * 60 * 60 * 24 * 7
);
}
}
我先簡(jiǎn)單解釋一下,在我們的例子中ReportGenerator繼承java.util.TimerTask,它又繼承了java.lang.Runnable,我們需要覆蓋run()方法。
調(diào)用時(shí)我們用schedule()方法讓它每周日0點(diǎn)0分執(zhí)行,避開(kāi)服務(wù)器高峰,實(shí)現(xiàn)Job Scheduling的目的。