JAVA定时器(java.util.Timer)

【1】Java 定时器(java.util.Timer)有定时触发计划任务的功能,通过配置定时器的间隔时间,在某一间隔时间段之后会自动有规律的调用预先所安排的计划任务(java.util.TimerTask)。与每个 Timer 对象相对应的是单个后台线程,用于顺序地执行所有计时器任务。计时器任务应该迅速完成。如果完成某个计时器任务的时间太长,那么它会“独占”计时器的任务执行线程。因此,这就可能延迟后续任务的执行,而这些任务就可能“堆在一起”,并且在上述不友好的任务最终完成时才能够被快速连续地执行。另外,由于我们希望当Web工程启动时,定时器能自动开始计时,在整个Web工程的生命期里,定时器能在每晚深夜触发一次报表计算引擎天等。因此定时器的存放位置也值得考查,不能简单的存在于单个Servlet或JavaBean中,必须能让定时器宿主的存活期为整个Web工程生命期,在工程启动时能自动加载运行。结合这两点,跟Servlet上下文有关的监听器就最合适不过了,通过在工程的配置文件中加以 合理配置,会在工程启动时自动运行,并在整个工程生命期中处于监听状态。   
    下面就Servlet监听器结合Java 定时器来讲述整个实现过程。要运用Servlet监听器需要实现javax.servlet.ServletContextListener接口,同时实现它的contextInitialized(ServletContextEvent event)和contextDestroyed(ServletContextEvent event)两个接口函数。考虑定时器有个建立和销毁的过程,看了前面两个接口函数,就不容置疑的把建立的过程置入 contextInitialized,把销毁的过程置入contextDestroyed了。

package com.korby.servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import com.korby.pub.TimerManager;
/**
* 启动定时器的监听器
* @author korby
* @version 1.0
*/

public class TimerListener implements ServletContextListener {
    private TimerManager tm = null;
    public void contextInitialized(ServletContextEvent sce) {
      int day,hour,min,sec;     
       day = 26; hour = 16; min = 42; sec = 0;    
       tm = new TimerManager(day,hour,min,sec);
     }
    public void contextDestroyed(ServletContextEvent sce) {

        tm.destoryTimer();
     }
}

package com.korby.pub;
import java.util.Timer;
import java.util.Date;
import java.util.Calendar;
/**
* 定时器
* @author korby
* @version 1.0
*/
public class TimerManager {
     Timer t = null;
    public TimerManager(int day,int hour,int min,int sec) {
         time(day,hour,min,sec);
     }
    public void time(int day,int hour,int min,int sec){   
     Calendar c = Calendar.getInstance();
     c.set(Calendar.DAY_OF_MONTH,day);
     c.set(Calendar.HOUR_OF_DAY,hour);
     c.set(Calendar.MINUTE,min);
     c.set(Calendar.SECOND,sec);
     Date date = c.getTime();
     System.out.println(c.getTime());
     t= new Timer();
     MyTask mt = new MyTask();
     t.schedule(mt, date);
     }
    public void destoryTimer(){
     t.cancel();
     }
}

package com.korby.pub;

import java.util.TimerTask;

/**

* 计划任务代码

* @author korby

* @version 1.0

*/

public class MyTask extends TimerTask{

    public MyTask() { }

    /**

      * 任务块

     */

    public void run() {

         System.out.println("定时器RUN");

     }

}

 

在web.xml中设置一个监听器:

 

<listener>

   <listener-class>com.korby.servlet.TimerListener</listener-class>

</listener>

 

 

【2】 java.util.Timer

void cancel()  终止此计时器,丢弃所有当前已安排的任务。

int purge()   从此计时器的任务队列中移除所有已取消的任务。

void schedule(TimerTask task,Date time)  安排在指定的时间执行指定的任务。

void schedule(TimerTask task,Date firstTime, long period)安排指定的任务在指定的时间开始进行重复的固定延迟执行。

void schedule(TimerTask task,long delay)  安排在指定延迟后执行指定的任务。

void schedule(TimerTask task,long delay, long period)安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。

void schedule(TimerTask task,long delay, long period)安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。

void scheduleAtFixedRate(TimerTask task,long delay, long period)安排指定的任务在指定的延迟后开始进行重复的固定速率执行。

 

【3】java.util.TimerTask由 Timer 安排为一次执行或重复执行的任务。

boolean cancel()          取消此计时器任务。

abstract void run()          此计时器任务要执行的操作。

long scheduledExecutionTime()       返回此任务最近实际 执行的已安排 执行时间。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yangsen251024/archive/2009/12/19/5036890.aspx

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值