您的位置:首页 > 编程语言 > Java开发

java定时器的使用

2013-09-18 23:25 225 查看
如果有个需求:要定时的执行某个任务,可以将其写成一个servlet,然后在在web.xml中定义马上加载,这样只要程序不终止,就会一直执行下去。

 <servlet>

    <servlet-name>ConnectionServlet</servlet-name>

    <servlet-class>servlet.ConnectionServlet</servlet-class>

    <load-on-startup>1</load-on-startup>

  </servlet>

  <servlet-mapping>

    <servlet-name>ConnectionServlet</servlet-name>

    <url-pattern>/ConnectionServlet</url-pattern>

  </servlet-mapping>  

其中:

public void init() throws ServletException {

        Start start = new Start();

        start.newStart();

        try {   -------------------该处的作用在于:给上一个方法以充足的执行时间。

            Thread.sleep(180000);

        } catch (InterruptedException e) {

            e.printStackTrace();

        }

        start.dayStart();//EQT报文定时任务

      

    }

然后:

public class Start {

   public void modStart(){

       Timer timer = new Timer();

       MyTask modTask = new MyTask();

       timer.schedule(modTask, 0, 1000);-------会自动调用modTask的run()方法。

   }

}

定时器类Timer在java.util包中。使用时,先实例化,然后使用实例的schedule(TimerTask task, long delay)方法,设定指定的任务task在指定的延迟delay后执行。定时器任务类TimerTask是抽象类,继承并重写其run()方法,可实现具体任务。

schedule(TimerTask task, Date time)设定指定任务task在指定时间time执行。

cancel()方法结束这个定时器。

schedule(TimerTask task, long delay, long period)方法设定指定任务task在指定延迟delay后进行固定延迟peroid的执行。

scheduleAtFixedRate(TimerTask task, long delay, long period)方法设定指定任务task在指定延迟delay后进行固定频率peroid的执行。

要实现一个定时任务,运用java中的Timer和TimerTask类可以非常容易实现实时调用处理函数。这两个类使用起来非常方便,可以完成我们对定时器的绝大多数需要。

看个简单的例子:

import java.io.IOException;

import java.util.Timer;

public class TimerTest {

public static void main(String[] args){

Timer timer = new Timer();

timer.schedule(new MyTask(), 1000, 2000);//在1秒后执行此任务,每次间隔2秒,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.

while(true){//这个是用来停止此任务的,否则就一直循环执行此任务了

try {

int ch = System.in.read();

if(ch-'c'==0){

timer.cancel();//使用这个方法退出任务

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

static class MyTask extends java.util.TimerTask{

@Override

public void run() {

// TODO Auto-generated method stub

System.out.println("________");

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息