春天的熊

Java定时任务的简单实现 【转载】

Spring为我们提供了很方便的定时任务处理,但是不用Spring呢?JDK也给提供了一个简单的定时任务处理,废话不多说,贴上源码

package com.yhj.timeTask;< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />

 

import java.util.TimerTask;

 

import com.yhj.common.date.DateUtil;

/**

 * 要执行的定时任务

 * com.yhj.timeTask.PrintTask.java

 * @author 一线天色 天宇星辰 创建于 2011-1-2 下午04:24:01

 */

public class PrintTask extends TimerTask {

 

    @Override

    public void run() {

       System.out.println(DateUtil.getCurrentChineseDate());

    }

 

}

package com.yhj.timer;

 

import java.text.ParseException;

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

 

import com.yhj.common.date.DateUtil;

import com.yhj.timeTask.PrintTask;

 

/**

 * 计时器

 * com.yhj.timer.PrintTimer.java

 * @author 一线天色 天宇星辰 创建于 2011-1-2 下午04:24:49

 */

public class PrintTimer {

    /**

     * 计时器

     */

    private  Timer timer =new Timer();

    /**

     * 每天执行一次

     * @param task

     * @param time 要求执行格式 hh:mn:ss

     * @author 一线天色 天宇星辰 创建于 2011-1-2 下午04:28:11

     * @throws InterruptedException

     * @throws ParseException

     */

    public void doEveryDay(TimerTask task,String time) throws InterruptedException, ParseException {

       time=DateUtil.getCurrentDateStr().substring(0,11)+time;

       long milliSeconds=DateUtil.compare(new Date(), DateUtil.praseDate(time), DateUtil.ONE_MILLI_SECOND);

       Thread.sleep(Math.abs(milliSeconds));

       timer.scheduleAtFixedRate(task,new Date(), DateUtil.ONE_DAY);

    }

    /**

     * 在某个时间点执行一次

     * @param task

     * @param date

     * @author 一线天色 天宇星辰 创建于 2011-1-2 下午04:29:29

     */

    public void doOnce(TimerTask task,Date date) {

       timer.schedule(task, date);

    }

    /**

     * 每隔多长时间执行一次

     * @param task

     * @param milliSeconds

     * @author 一线天色 天宇星辰 创建于 2011-1-2 下午04:53:54

     */

    public void doWithRepeat(TimerTask task,long milliSeconds) {

       timer.scheduleAtFixedRate(task,0, milliSeconds);

    }

 

}

package com.yhj.clint;

 

import com.yhj.timeTask.PrintTask;

import com.yhj.timer.PrintTimer;

 

public class Clint {

 

    /**

     * @param args

     * @author 一线天色 天宇星辰 创建于 2011-1-2 下午04:55:19

     */

    public static void main(String[] args) {

       new PrintTimer().doWithRepeat(new PrintTask(), 1000);

 

    }

 

}

对于该调用哪个方法呢?参见JDK(如下)

方法摘要

 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

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

 void

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

 下面是我的程序的运行结果,如图所示,一个1秒执行一次的定时任务就搞定了,简单吧?(当然最好还是用框架里面提供的定时任务处理方法)

Java定时任务的简单实现 - 一线天色 天宇星辰 - 一线天色 天宇星辰

 

2012-03-13
/  标签: Java定时任务
   
评论
热度(2)