Java定时更新数据—定时器

在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等。  这次,在我们的开发中,有这么一个需求.个功能执行需要的时间比较长,则决定采用定时器的方式,每隔一段时间系统自动执行此功能,当界面真正触发时,只需要单的读取结果,而不需要执行复杂的逻辑判断.那如何实现此功能呢?要想实现它首先我们需要认识了解几个jdk封装的类.

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()此计时器任务要执行的操作。  这里是具体操作的代码实现。

通过TimerTimerTask两个类我们能实现任务的重复执行了  但是我们并没有事情执行的起止点。  我们不要人为的 去触发事情的执行我们要通过代码让服务自己去执行  这样,我们需要一个监听,去监听当前是否符合执行的条件。          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 context Initialized(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会给我们打印出定时器测试***”

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值