實例講授java准時義務。本站提示廣大學習愛好者:(實例講授java准時義務)文章只能為提供參考,不一定能成為您想要的結果。以下是實例講授java准時義務正文
明天為年夜家分享的一個經歷就是java的准時義務,就是說在一天的某個時光點履行以下代碼。
public class TimerManager {
//時光距離
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
public TimerManager() {
Calendar calendar = Calendar.getInstance();
/*** 定制逐日2:00履行辦法 ***/
calendar.set(Calendar.HOUR_OF_DAY, 2);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date date=calendar.getTime(); //第一次履行准時義務的時光
//假如第一次履行准時義務的時光 小於 以後的時光
//此時要在 第一次履行准時義務的時光 加一天,以便此義務鄙人個時光點履行。假如不加一天,義務會立刻履行。
if (date.before(new Date())) {
date = this.addDay(date, 1);
}
Timer timer = new Timer();
NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
//支配指定的義務在指定的時光開端停止反復的固定延遲履行。
timer.schedule(task,date,PERIOD_DAY);
}
// 增長或削減天數
public Date addDay(Date date, int num) {
Calendar startDT = Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH, num);
return startDT.getTime();
}
}
在TimerManager 這個類外面,年夜家必定要留意時光點的成績。假如你設定在清晨2點履行義務。但你是在2點今後宣布的法式或是重啟過辦事,那如許的情形下,義務會立刻履行,而不是比及第二天的清晨2點履行。為了,防止這類情形產生,只能斷定一下,假如宣布或重啟辦事的時光晚於准時履行義務的時光,就在此基本上加一天。
public class NFDFlightDataTimerTask extends TimerTask {
private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);
@Override
public void run() {
try {
//在這裡寫你要履行的內容
} catch (Exception e) {
log.info("-------------解析信息產生異常--------------");
}
}
}
public class NFDFlightDataTaskListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
new TimerManager();
}
public void contextDestroyed(ServletContextEvent event) {
}
}
然後要在web.xml外面設置裝備擺設監聽器
<listener> <listener-class> com.listener.NFDFlightDataTaskListener </listener-class> </listener>
以上就是本文的全體內容,願望對年夜家的進修有所贊助。