package com.weiyuanit.test1;import java.util.Date;import java.util.TimerTask;/*********************** * @author:han   * @version:1.0       * @created:2013-11-20   *********************** */public class MyTask extends TimerTask {    @Override    public void run() {        //此处添加具体任务代码        try {            System.out.println(" =============== call at :" + (new Date()));        } catch (Exception e) {            System.out.println("-------------解析信息发生异常--------------");            e.printStackTrace();        }    }}

package com.weiyuanit.test1;import java.util.Calendar;import java.util.Date;import java.util.Timer;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;/*********************** * 定时任务测试 * @author:han   * @version:1.0       * @created:2013-11-20   *********************** */public class MyListener implements ServletContextListener{    private Timer timer = null;                        //时间间隔    private static final long PERSIOD_DAY = 24 * 60 * 60 * 1000;                        public void contextDestroyed(ServletContextEvent sce) {        // TODO Auto-generated method stub        timer.cancel();    }    public void contextInitialized(ServletContextEvent sce) {        timer = new Timer(true);        //设置任务计划,启动和间隔时间        //timer.schedule(new MyTask(),0, 86400000);                                MyTask myTask = new MyTask();                                //1.立刻开始执行myTask的任务,只执行一次//      timer.schedule(myTask, new Date());                                //2.立刻开始执行myTask的任务,执行完本次任务,隔3秒再执行一次//      timer.schedule(myTask, new Date(),3000);                                //3.5秒钟后开始执行myTask的任务,只执行一次//      timer.schedule(myTask, 5000);                                //4.5秒钟后开始执行myTask的任务,执行完本次任务后,隔3秒再执行一次//      timer.schedule(myTask, 5000,3000);                                //5.立刻开始执行myTask任务,每隔3秒再执行一次//      timer.scheduleAtFixedRate(myTask, new Date(), 3000);                                //6.秒钟后开始执行myTask任务,每隔3秒执行一次//      timer.schedule(myTask, 5000,3000);                                /**         * 需要注意的是scheduleAtFixedRate和schedule在参数完全相同的情况下,执行效果是不同的。         * 上面例子中任务只是打印一个字符串,比较简单。         * 但如果任务比较复杂,或者由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,         * 则scheduleAtFixedRate方法将快速连续地出现两次或更多的执行,从而使后续执行能够“追赶上来”;         * 而schedule方法的后续执行也将被延迟。         * 所以,在长期运行中,scheduleAtFixedRate执行的频率将正好是指定周期的倒数,schedule 执行的频率一般要稍慢于指定周期的倒数。                另外,TimerTask的构造函数是protected,所以无法再类中直接new一个TimerTask,而只能写一个类继承TimerTask。         */                        /*      try {            Thread.sleep(10000);        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        System.out.println(" 1 ");        //timer.cancel();//结束任务执行,程序并不终止        System.out.println(" 2 ");*/                                                        //7.定制每日夜里2:00执行方法        Calendar calendar = Calendar.getInstance();        calendar.set(Calendar.HOUR_OF_DAY, 14);        calendar.set(Calendar.MINUTE, 24);        calendar.set(Calendar.SECOND, 0);                                //第一次执行定时任务的时间        Date date = calendar.getTime();                                /**         * 如果第一次执行定时任务的时间 小于 当前的时间,         * 此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。         * 如果不加一天,任务会立即执行         */        if (date.before(new Date())) {            date = this.addDate(date, 1);        }        //timer.schedule(myTask, date,PERSIOD_DAY);                                timer.schedule(myTask, date,5000);                                                        /**         * 注意事项:         * 一定要注意时间点的问题。如果你设定在凌晨2点执行任务。但你是在2点以后发布程序         * 或是重启过服务。那这样的情况下,任务会立即执行,而不是等到第二天的凌晨2点再执行。         * 为了避免这种情况发生,只能判断一下,如果发布或重启服务的时间晚于定时执行任务的时间,         * 就在此基础上加一天。         */                            }    /**     * 增加或减少天数     * *******************     * @author: han     * 2013-11-21     * *******************     * @param date     * @param num     * @return     */    public Date addDate(Date date,int num) {        Calendar startDate = Calendar.getInstance();        startDate.setTime(date);        startDate.add(Calendar.DAY_OF_MONTH, num);        return startDate.getTime();    }                    }

index.jsp
com.weiyuanit.test1.MyListener

可以去下载:java定时任务小例子