1.為什麼要用定時器
有時我們需要在一個規定的時間内執行相應的操作,例如:中國移動會在每個月的最後一天的淩晨清除使用者的剩餘流量,一些項目中會在每個月的25号統計公司員工的績效等,這個時候就需要用到定時器。
綜上,定時器是一個從某一時刻開始的時候就根據設定的時間執行相應的操作的一個工具。
2.工程說明
要求:寫一個定時器的監聽器,這個監聽器每十秒向控制台輸出一次時間資訊
監聽器:MyServletContextListener實作ServletContextListener接口,這個監聽器會從伺服器一啟動就開始進行監聽,這是因為它監聽的是我們的context(application)。
在此附上工程的下載下傳位址
3.監聽器的實作
package listener;
import java.text.SimpleDateFormat;
import java.util.Timer;
import java.util.TimerTask;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/*
* 2018.5.22
* @authoe Dragon
* 自定義application的監聽器,該監聽器實作一個定時器的功能
* 從服務啟動後,該監聽器就會運作
* 定時器:實作每10秒向控制器輸出一條時間資訊
*/
@WebListener
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.err.println("MyServletContextListener------contextDestroyed");
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.err.println("MyServletContextListener------contextInitialized");
//建立定時器對象
Timer time=new Timer();
//給定時器添加任務
time.schedule(new TimerTask() {
@Override
public void run() {
// 定時器執行的具體任務
java.util.Date date=new java.util.Date();
SimpleDateFormat dataFormat=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.err.println("目前的時間是:"+dataFormat.format(date));
}
}, 0, 10000);
}
}
4.運作效果
5.小結
以上是監聽器監聽一個context對象的使用demo,通過建立定時器執行具體的任務,如果想要這個定時器執行其他的任務,應該修改run()方法中的代碼。