JDK Timer实现任务的调度举例

     以前用JDK的Timer实现过定时同步用户数据,今日看到Timer相关的一个例子,实现每隔10分钟检测一次用户是否有新邮件抵达,调度只在每天早上9:00到下午6:00进行。

    一. 建立任务:

    

import  java.util.TimerTask; 
import  java.util.Calendar; 

public   class  MyTask  extends  TimerTask

    
private static final int C_SCHEDULE_HOUR = 15
    
private static boolean isRunning = false

    
public MyTask()
    

    }
 

    
public void run()
    

        Calendar cal 
= Calendar.getInstance(); 
        
if (!isRunning)
        

            
//if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY))
            
                isRunning 
= true
                System.out.println(
new java.util.Date() + "        任务开始"); 
                
for (int i = 0 ; i < 100 ; i++ )
                
{
                    System.out.println(
new java.util.Date() + "          任务完成" + i + "/" + 100 ); 
                }
 
                isRunning 
= false
                System.out.println(
new java.util.Date() + "       所有任务完成!"); 
            }
 
        }
 
        
else 
        

            System.out.println(
new java.util.Date() + "         任务退出!!!"); 
        }
 
    }
 
}

 

      注意:Timer类并不支持每天每段时间的调度,因此代码中使用Calendar类获取当前时间,比较当前时间与系统需要调度的时间段。

    二.  调度任务

    本应用的计时器随应用的启动而启动,一次可以设计成load-on-startup的servlet,也可以设计成listener,一般设计成listener,本例中采用该方法。

   任务调督的listener如下:

  

import  java.util.TimerTask; 
import  java.util.Timer; 
import  javax.servlet. *

public   class  ScheduleListener  implements  ServletContextListener

    
private java.util.Timer timer = null
    
    
public void contextInitialized(ServletContextEvent sce)
    

        timer 
= new Timer(true); 
        sce.getServletContext().log(
new java.util.Date() + "计时器已经启动..."); 
        System.out.println(
new java.util.Date() + "      计时器已经启动...");
        timer.schedule(
new MyTask() , 0 , 2*60*1000);//每4分钟执行一次 
        sce.getServletContext().log(new java.util.Date() + "计时器执行一次!!!!!"); 
        System.out.println(
new java.util.Date() + "          计时器执行一次!!!!!");
    }
 
    
    
public void contextDestroyed(ServletContextEvent sce)
    

        timer.cancel(); 
        sce.getServletContext().log(
new java.util.Date() + "计时器被销毁!!!"); 
        System.out.println(
new java.util.Date() + "          计时器被销毁!!!");
    }
 
}
 

    三.在web.xml加载该listener,配置文件如下:

  

<? xml version="1.0" encoding="ISO-8859-1" ?>
<! DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd"
>

< web-app >
    
<!--  此处配置listener -->
    
< listener >  
        
< listener-class > ScheduleListener </ listener-class >  
    
</ listener >  
</ web-app >
      应用启动后,该listener随着启动,负责加载Timer实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值