Java定时任务
来源:互联网 发布:sql怎么用别名查询 编辑:程序博客网 时间:2024/06/06 00:52
Java.util.Timer:一种线程设施,用于安排以后再后台线程中执行的任务.可安排任务执行一次或者定期重复执行.其中几个方法需要我们注意一下:
cancel():终止此计时器,丢弃所有当前已安排的任务。
schedule(TimerTask task, Date time):安排在指定的时间执行指定的任务。
schedule(TimerTask task, Date firstTime, long period):安排指定的任务在指定的时间开始进行重复的固定延迟执行。
schedule(TimerTask task, long delay):安排在指定延迟后执行指定的任务。
schedule(TimerTask task, long delay, long period):安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
scheduleAtFixedRate(TimerTask task, Date firstTime, long period):安排指定的任务在指定的时间开始进行重复的固定速率执行。
scheduleAtFixedRate(TimerTask task, long delay, long period):安排指定的任务在指定的延迟后开始进行重复的固定速率执行。
在上面提到的Timer的几个方法中,参数中都涉及到了TimerTask类.那TimerTask类是干嘛的呢?他就是Timer所安排的任务,即被设置的要执行一次或多次的任务.这个类中下面这几个方法需要我们多加注意。
cancel():取消此计时器任务。
run():此计时器任务要执行的操作。这里是具体操作的代码实现。
通过Timer和TimerTask两个类,我们就能实现任务的重复执行了。但是,我们并没有事情执行的起止点。我们不要人为的去触发事情的执行,我们要通过代码让服务自己去执行。这样,我们就需要一个监听,去监听当前是否符合执行的条件。ServletContextListener为我们实现此功能。此接口能够监听ServletContext对象的生命周期,实际上就是监听Web应用的生命周期。当Servlet容器启动或终止Web应用时,会触发ServletContextEvent事件,该事件由ServletContextListener来处理。涉及到的两个方法为:
contextInitialized(ServletContextEvent sce);初始化;
contextDestroyed(ServletContextEvent sce)销毁
到这里,准备工作就做好了。下面我们来看一个例子定时器具体是怎样实现的。
package com.boco.transnms.server.bo.stat;import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class NFDFlightDataTaskListener implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
//销毁时的代码
}
@Override
//在服务启动时,执行此方法。
public void contextInitialized(ServletContextEvent arg0) {
new TimerManager();
}
}
//要执行的任务
class NFDFlightDataTimerTask extends TimerTask{
@Override
//此方法为具体要定时操作的方法
public void run() {
System.out.println("定时器测试:"+System.currentTimeMillis());
}
}
class TimerManager{
private static final long PERIOD_DAY=6 * 1000; //每隔六秒执行一次
public TimerManager() {
Timer timer = new Timer(); //定时器实例化
NFDFlightDataTimerTask task = new NFDFlightDataTimerTask(); //要执行的任务
//安排指定的任务在指定的时间开始进行重复的固定延迟执行。
timer.schedule(task,new Date(),PERIOD_DAY);
}
}
既然监听是在服务启动的时候就有了,自然离不开配置文件了。那web.xml配置文件是如何配置的呢?
<listener>
<!—此处为实现监听接口的完整的包名类名-->
<listener-class>
com.boco.transnms.server.bo.stat.NFDFlightDataTaskListener
</listener-class>
</listener>
到这里定时器的实现就完全实现了,运行一下我们就会发现,控制台中每隔6秒,就会给我们打印出“定时器测试***”。
- java定时任务,每天定时执行任务
- java定时任务,每天定时执行任务
- Java定时任务,每天定时执行任务
- java定时任务,每天定时执行任务
- javaweb 定时任务 java定时任务
- java定时任务,每天定时执行任务
- java定时任务,每天定时执行任务
- java定时任务,每天定时执行任务
- java定时任务,每天定时执行任务
- java定时任务,每天定时执行任务
- java定时任务,每天定时执行任务
- java定时任务 每天定时执行任务
- java定时任务,每天定时执行任务
- Java 定时任务 与 Spring定时任务
- java定时任务,每天定时执行任务
- java定时任务,每天定时执行任务
- java定时任务
- 定时任务实现 java
- javaIO总结
- 00-自测4. Have Fun with Numbers (20)
- 进程与端口映射
- std::nothrow
- 克鲁斯卡尔算法求解最小生成树
- Java定时任务
- C++ 内存详解(二)
- 【文件压缩】 Android Jar、Zip文件压缩和解压缩处理
- 删除重复代码--提升代码质量
- AspNet MVC4 教学-19:Asp.Net MVC4 利用Linq技术的搜索应用快速Demo
- Hibernate继承映射
- 回归预测及R语言实现 Part2 回归R语言实现
- 七牛的ufop应用场景介绍
- 工作经历0