1. 程式人生 > >Java Timer 定時器的使用

Java Timer 定時器的使用

最近專案中有如下需求:
服務啟動的時候啟動一個定時器,每天凌晨零點執行一個後臺刪除的任務。

在此記錄一下實現方式。
首先在專案的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("定時清除任務開始執行..."); } } }