您好,欢迎访问三七文档
java的定时器使用方法定时器类Timer在java.util包中。使用时,先实例化,然后使用实例的schedule(TimerTasktask,longdelay)方法,设定指定的任务task在指定的延迟delay后执行。定时器任务类TimerTask是抽象类,继承并重写其run()方法,可实现具体任务。schedule(TimerTasktask,Datetime)设定指定任务task在指定时间time执行。cancel()方法结束这个定时器。schedule(TimerTasktask,longdelay,longperiod)方法设定指定任务task在指定延迟delay后进行固定延迟peroid的执行。scheduleAtFixedRate(TimerTasktask,longdelay,longperiod)方法设定指定任务task在指定延迟delay后进行固定频率peroid的执行。要实现一个定时任务,运用java中的Timer和TimerTask类可以非常容易实现实时调用处理函数。这两个类使用起来非常方便,可以完成我们对定时器的绝大多数需要。看个简单的例子:importjava.io.IOException;importjava.util.Timer;publicclassTimerTest{publicstaticvoidmain(String[]args){Timertimer=newTimer();timer.schedule(newMyTask(),1000,2000);//在1秒后执行此任务,每次间隔2秒,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.while(true){//这个是用来停止此任务的,否则就一直循环执行此任务了try{intch=System.in.read();if(ch-'c'==0){timer.cancel();//使用这个方法退出任务}}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}staticclassMyTaskextendsjava.util.TimerTask{@Overridepublicvoidrun(){//TODOAuto-generatedmethodstubSystem.out.println(________);}}}==========Java定时器在Web中的应用==========在web中,定时器的启动一般随webserver的启动而启动,一般有两种方法.方法一:在web.xml里配置一个Servlet,并设置其随webserver的启动而启动。然后在该Servlet的init()方法里启动定时器,在destory()方法里销毁定时器。方法二:在web.xml里配置一个Listener,然后在该Listener的初始化方法里启动定时器,在其销毁的方法朝左销毁定时器。在servlet中启动定时器java代码importjava.io.IOException;importjava.util.Timer;importjavax.servlet.RequestDispatcher;importjavax.servlet.ServletContext;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.commons.lang.StringUtils;publicclassConvergeDataServletextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;privateTimertimer1=null;privateTasktask1;/***Constructoroftheobject.*/publicConvergeDataServlet(){super();}/***Destructionoftheservlet.*/publicvoiddestroy(){super.destroy();if(timer1!=null){timer1.cancel();}}publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doGet(request,response);}//init方法启动定时器publicvoidinit()throwsServletException{ServletContextcontext=getServletContext();//(true为用定时间刷新缓存)StringstartTask=getInitParameter(startTask);//定时刷新时间(分钟)Longdelay=Long.parseLong(getInitParameter(delay));//启动定时器if(startTask.equals(true)){timer1=newTimer(true);task1=newTask(context);timer1.schedule(task1,delay*60*1000,delay*60*1000);}}}定时执行操作java代码/****@authorcallan*/importjava.util.TimerTask;importjavax.servlet.ServletContext;publicclassTaskextendsTimerTask{privateServletContextcontext;privatestaticbooleanisRunning=true;publicTask(ServletContextcontext){this.context=context;}@Overridepublicvoidrun(){if(isRunning){}}}在web.xml配置这个servlet为服务启动时就调用servletservlet/servletservletservlet-nametaskservlet/servlet-nameservlet-classcom.task/servlet-classinit-paramparam-namestartTask/param-nameparam-valuetrue/param-value/init-paraminit-paramparam-nameintervalTime/param-nameparam-value1/param-value/init-paramload-on-startup300/load-on-startup/servletservlet/servlet2009-07-18java定时器关键字:java好多朋友用过Windows的任务计划,也有不少程序迷自己曾写过时钟报警、系统自动关机等趣味程序,可却很少有朋友在Web工程中实现过类似功能。当Web工程启动时,定时器能自动开始计时,在整个Web工程的生命期里,定时器能在每晚深夜触发一次任务。因此定时器的存放位置也值得考查,不能简单的存在于单个Servlet或JavaBean中,必须能让定时器宿主的存活期为整个Web工程生命期,在工程启动时能自动加载运行。结合这两点,跟Servlet上下文有关的侦听器就最合适不过了,通过在工程的配置文件中加以合理配置,会在工程启动时自动运行,并在整个工程生命期中处于监听状态。下面就Servlet侦听器结合Java定时器来讲述整个实现过程。要运用Servlet侦听器需要实现javax.servlet.ServletContextListener接口,同时实现它的contextInitialized(ServletContextEventevent)和contextDestroyed(ServletContextEventevent)两个接口函数。考虑定时器有个建立和销毁的过程,看了前面两个接口函数,就不容置疑的把建立的过程置入contextInitialized,把销毁的过程置入contextDestroyed了。我把ServletContextListener的实现类取名为ContextListener,在其内添加一个定时器,示例代码如下所示:importjava.util.Timer;importjavax.servlet.ServletContextEvent;importjavax.servlet.ServletContextListener;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServlet;publicclassContextListenerextendsHttpServletimplementsServletContextListener{publicContextListener(){}privatejava.util.Timertimer=null;publicvoidcontextInitialized(ServletContextEventevent){timer=newjava.util.Timer(true);event.getServletContext().log(定时器已启动);timer.schedule(newMyTask(event.getServletContext()),0,60*60*1000);event.getServletContext().log(已经添加任务调度表);}publicvoidcontextDestroyed(ServletContextEventevent){timer.cancel();event.getServletContext().log(定时器销毁);}}以上代码中,timer.schedule(newMyTask(event.getServletContext()),0,60*60*1000)这一行为定时器调度语句,其中MyTask是自定义需要被调度的执行任务(在我的财政数据中心项目中就是报表计算引擎入口),从java.util.TimerTask继承,下面会重点讲述,第三个参数表示每小时(即60*60*1000毫秒)被触发一次,中间参数0表示无延迟。其它代码相当简单,不再详细说明。下面介绍MyTask的实现,上面的代码中看到了在构造MyTask时,传入了javax.servlet.ServletContext类型参数,是为记录Servlet日志方便而传入,因此需要重载MyTask的构造函数(其父类java.util.TimerTask原构造函数是没有参数的)。在timer.schedule()的调度中,设置了每小时调度一次,因此如果想实现调度任务每24小时被执行一次,还需要判断一下时钟点,以常量C_SCHEDULE_HOUR表示(晚上12点,也即0点)。同时为防止24小
本文标题:java定时器
链接地址:https://www.777doc.com/doc-2880915 .html