java定时器
2016-06-13 12:59
387 查看
首先介绍java定时器(java.util.Timer)有定时执行计划任务的功能,通过设定定时器的间隔时间,会自动在此间隔时间后执行预先安排好的任务(java.util. TimerTask)
如: 每隔一个小时执行任务 timer.schedule(TimerTask, 0, 60 * 60 * 1000);
schedule方法的第一个参数是需要执行的任务,此类的类型为java.util.TimerTask,第二个参数为执行任务前等待时间,此处0表示不等待,第三个参数为间隔时间,单位为毫秒
由于我们希望当Web工程启动时,定时器能自动开始计时,这样在整个Web工程的生命期里, 就会定时的执行任务,因此启动定时器的类不能是一般的类,此处用Servlet的监听器类来启动定时器,通过在配置文件里配置此监听器, 让其在工程启动时自动加载运行,存活期为整个Web工程生命期.
要运用Servlet侦听器需要实现javax.servlet.ServletContextListener接口,以下是实例:
public class MyTimerTask implements ServletContextListener
{
private Timer timer = null;
public void contextDestroyed(ServletContextEvent event)
{
timer.cancel();
event.getServletContext().log("定时器销毁");
}
public void contextInitialized(ServletContextEvent event)
{
//在这里初始化监听器,在tomcat启动的时候监听器启动,可以在这里实现定时器功能
timer = new Timer(true);
event.getServletContext().log("定时器已启动");//添加日志,可在tomcat日志中查看到
//调用exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时;
timer.schedule(new SendEmail(event.getServletContext()),0,24*60*60*1000);
}
}
如: 每隔一个小时执行任务 timer.schedule(TimerTask, 0, 60 * 60 * 1000);
schedule方法的第一个参数是需要执行的任务,此类的类型为java.util.TimerTask,第二个参数为执行任务前等待时间,此处0表示不等待,第三个参数为间隔时间,单位为毫秒
由于我们希望当Web工程启动时,定时器能自动开始计时,这样在整个Web工程的生命期里, 就会定时的执行任务,因此启动定时器的类不能是一般的类,此处用Servlet的监听器类来启动定时器,通过在配置文件里配置此监听器, 让其在工程启动时自动加载运行,存活期为整个Web工程生命期.
要运用Servlet侦听器需要实现javax.servlet.ServletContextListener接口,以下是实例:
public class MyTimerTask implements ServletContextListener
{
private Timer timer = null;
public void contextDestroyed(ServletContextEvent event)
{
timer.cancel();
event.getServletContext().log("定时器销毁");
}
public void contextInitialized(ServletContextEvent event)
{
//在这里初始化监听器,在tomcat启动的时候监听器启动,可以在这里实现定时器功能
timer = new Timer(true);
event.getServletContext().log("定时器已启动");//添加日志,可在tomcat日志中查看到
//调用exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时;
timer.schedule(new SendEmail(event.getServletContext()),0,24*60*60*1000);
}
}
相关文章推荐
- java并发编程(十九)--并发新特性—Executor框架与线程池
- Spring 的自动装配
- java并发编程(十八)--深入Java内存模型—内存操作规则总结
- SpringBoot之RESTFull Web Service
- java并发编程(十六)--生产者—消费者模型
- javax.crypto.BadPaddingException: Given final block not properly padded 解决方法
- JAVA中的定时调度(Timer和TimerTask)
- java并发编程(十五)--线程间通信中notifyAll造成的早期通知问题
- 《深入理解java虚拟机》读书笔记-第八章虚拟机字节码执行引擎
- Java的反射机制浅谈
- java并发编程(十四)--线程间通信中notify通知的遗漏
- Java中instanceof
- Java易错知识点笔记
- Struts2学习【1】第一个完整程序
- Spring 视图和视图解析器简介
- Spring 视图和视图解析器简介
- java并发编程(十三)--线程间协作:wait、notify、notifyAll
- java并发编程(十二)--可重入内置锁
- RxJava操作符(05-结合操作)
- RxJava操作符(05-结合操作)