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()方法中的代码。