一、Timer介绍
java.util.Timer
java.util.TimerTask
Timer是一个定时器类,通过该类可以为指定的定时任务进行配置。TimerTask类是一个定时任务类,该类实现了Runnable接口,而且是一个抽象类,如下所示:
public abstract class TimerTask implements Runnable
可以通过继承该类,来实现自己的定时任务。
Timer定时器实例有多种构造方法:
Timer()
创建一个新计时器。
Timer(boolean isDaemon)
创建一个新计时器,可以指定其相关的线程作为守护程序运行。
Timer(String name)
创建一个新计时器,其相关的线程具有指定的名称。
Timer(String name, boolean isDaemon)
创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行。
二、Timer方法
定时执行方法
1、在特定时间执行任务,只执行一次
public void schedule(TimerTask task,Date time)
2、在特定时间之后执行任务,只执行一次
public void schedule(TimerTask task,long delay)
3、指定第一次执行的时间,然后按照间隔时间,重复执行
public void schedule(TimerTask task,Date firstTime,long period)
4、在特定延迟之后第一次执行,然后按照间隔时间,重复执行
public void schedule(TimerTask task,long delay,long period)
参数:
delay: 延迟执行的毫秒数,即在delay毫秒之后第一次执行
period:重复执行的时间间隔
5、第一次执行之后,特定频率执行,与3同
public void scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
6、在delay毫秒之后第一次执行,后按照特定频率执行
public void scheduleAtFixedRate(TimerTask task,long delay,long period)
方法名称schedule()和scheduleAtFixedRate()两者的区别
<1>schedule()方法更注重保持间隔时间的稳定:保障每隔period时间可调用一次
<2>scheduleAtFixedRate()方法更注重保持执行频率的稳定:保障多次调用的频率趋近于period时间,如果任务执行时间大于period,会在任务执行之后马上执行下一次任务
Timer注销
timer.cancel();
三、代码
public class DbUpdate {
private CapInsertDataBusiness capInsertDataBusiness;
private Timer timeSession;
private int checkInterVal;
private static final Logger logger = Logger.getLogger(DbUpdate.class);
public DbUpdate(){
super();
}
public CapInsertDataBusiness getCapInsertDataBusiness() {
return capInsertDataBusiness;
}
public void setCapInsertDataBusiness(CapInsertDataBusiness capInsertDataBusiness) {
this.capInsertDataBusiness = capInsertDataBusiness;
}
public void destory() {
if (this.timeSession != null) {
this.timeSession.cancel();
}
}
public void init() {
this.checkInterVal = StringUtil.isNullOrEmpty(SpringContextUtil.getContextProperty("StatusCheckInterval")) ? 30
: Integer.parseInt(SpringContextUtil.getContextProperty("StatusCheckInterval"));
this.timeSession = new Timer();
this.timeSession.schedule(new TimerTask() {
public void run() {
try {
//定时添加数据到数据库
//capInsertDataBusiness.capInsertData();
//capInsertDataBusiness.capInsertDataTotal();
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}
}, 1000 , this.checkInterVal * 60 * 1000); //在1秒执行,每隔一定的时间更新一次
}
}