• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

Java定时更新数据—定时器

JAVA相关 水墨上仙 3012次浏览

Java定时更新数据—定时器

&nbsp&nbsp&nbsp&nbsp在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等。这次,在我们的开发中,就有这么一个需求.某个功能执行需要的时间比较长,则决定采用定时器的方式,每隔一段时间系统自动执行此功能,当界面真正触发时,只需要简单的读取结果,而不需要执行复杂的逻辑判断.那如何实现此功能呢?要想实现它,首先我们需要认识了解几个jdk封装的类.
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspJava.util.Timer:一种线程设施,用于安排以后再后台线程中执行的任务.可安排任务执行一次或者定期重复执行.其中几个方法需要我们注意一下:
cancel():终止此计时器,丢弃所有当前已安排的任务.
schedule(TimerTask&nbsptask,&nbspDate&nbsptime)&nbsp:安排在指定的时间执行指定的任务。
schedule(TimerTask&nbsptask,&nbspDate&nbspfirstTime,&nbsplong&nbspperiod):安排指定的任务在指定的时间开始进行重复的固定延迟执行。
schedule(TimerTask&nbsptask,&nbsplong&nbspdelay):安排在指定延迟后执行指定的任务。
schedule(TimerTask&nbsptask,&nbsplong&nbspdelay,&nbsplong&nbspperiod)&nbsp:安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
scheduleAtFixedRate(TimerTask&nbsptask,&nbspDate&nbspfirstTime,&nbsplong&nbspperiod)&nbsp:安排指定的任务在指定的时间开始进行重复的固定速率执行。
scheduleAtFixedRate(TimerTask&nbsptask,&nbsplong&nbspdelay,&nbsplong&nbspperiod)&nbsp:安排指定的任务在指定的延迟后开始进行重复的固定速率执行。
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp在上面提到的Timer的几个方法中,参数中都涉及到了TimerTask类.那TimerTask类是干嘛的呢?他就是Timer所安排的任务.即被设置的要执行一次或多次的任务.这个类中下面这几个方法需要我们多加注意.
cancel():取消此计时器任务。
run():此计时器任务要执行的操作。这里是具体操作的代码实现.
&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp通过Timer和TimerTask两个类,我们就能实现任务的重复执行了.但是,我们并没有事情执行的起止点.我们不要人为的去触发事情的执行,我们要通过代码让服务自己去执行.这样,我们就需要一个监听,去监听当前是否符合执行的条件.ServletContextListener为我们实现此功能.此接口能够监听ServletContext对象的生命周期,实际上就是监听Web应用的生命周期.当Servlet容器启动或终止Web应用时,会触发ServletContextEvent事件,该事件由ServletContextListener来处理.涉及到的两个方法为:
contextInitialized(ServletContextEvent&nbspsce);初始化;
contextDestroyed(ServletContextEvent&nbspsce)销毁
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp到这里,准备工作就做好了.下面我们来看一个例子定时器具体是怎样实现的.

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>


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明Java定时更新数据—定时器
喜欢 (0)
加载中……