Java Timer 定時器的使用
阿新 • • 發佈:2019-01-05
最近專案中有如下需求:
服務啟動的時候啟動一個定時器,每天凌晨零點執行一個後臺刪除的任務。
在此記錄一下實現方式。
首先在專案的web.xml檔案中進行監聽,在服務啟動時執行目標類。
<listener>
<listener-class>com.cn.thread.DeleteBmpImg</listener-class>
</listener>
以下為具體執行定時刪除任務的DeleteBmpImg類的程式碼
package com.cn.thread;
import java.util.Timer;
import java.util.TimerTask;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class DeleteBmpImg implements ServletContextListener {
private Timer timer = null;
/**
* 初始化監聽器,在tomcat啟動的時候監聽器啟動,實現定時器功能
*/
@Override
public void contextInitialized (ServletContextEvent event) {
event.getServletContext().log("定時器已啟動");
//初始化一個日曆
Calendar calendar = Calendar.getInstance();
//每次啟動都是次日凌晨0點為開始執行時間
calendar.add(Calendar.DATE,1);
calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DATE),00 ,00,00);
//一天的間隔
long timeInterval = 60 * 60 * 24 * 1000;
timer = new Timer(true);
//schedule方法第一個引數為呼叫的任務,第二個引數設定執行時間點或延遲執行的時間段,第三個引數為每隔多長時間執行一次(單位為ms)
timer.schedule(new DeleteBmpPitcure(),calendar.getTime(),timeInterval);
}
@Override
public void contextDestroyed(ServletContextEvent event){
if(timer != null){
timer.cancel();
}
event.getServletContext().log("定時器銷燬");
}
class DeleteBmpPitcure extends TimerTask {
public DeleteBmpPitcure(){
}
@SuppressWarnings("unchecked")
public void run() {
System.out.println("定時清除任務開始執行...");
}
}
}