分享

JDK Timer实现任务的调度举例

 昵称21365845 2015-08-19
以前用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./dtd/web-app_2_3.dtd"
>

<web-app>
    <!-- 此处配置listener-->
    <listener> 
        <listener-class>ScheduleListener</listener-class> 
    </listener> 
</web-app>
    应用启动后,该listener随着启动,负责加载Timer实例。
posted on 2007-02-11 23:35 阿蜜果 阅读(1226) 评论(0)  编辑  收藏 所属分类: Java

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多