Java自定义定时器

来源:互联网 发布:mac锁屏时钟 编辑:程序博客网 时间:2024/05/16 09:55

Java自定义定时器

很多时候,我们需要使用定时器进行操作,比如数据统计、任务定时等等。但是很多时候,定时任务需要可以取消,需要重新设置时间等等,使用Java自带的Timer有时不太简单,所以想到对Timer进行扩展,实现自定义定时器的效果。
定时任务接口:

public interface StartTimer {    /**      * startNextTimer      * @描述: 开启下一次定时器      * @作者: zhuxl      * @创建时间: 2016年8月29日      */    public abstract void startNextTimer();    /**      * startTimer      * @描述: 开启定时器      * @作者: zhuxl      * @创建时间: 2016年8月29日      */    public abstract void startTimer();    /**      * stopTimer      * @描述: 停止定时器      * @作者: zhuxl      * @创建时间: 2016年8月29日      */    public abstract void stopTimer();    /**      * restartTimer      * @描述: 重新启动      * @作者: zhuxl      * @创建时间: 2016年8月30日      */    public abstract void restartTimer();}

抽象实现:

/** * 抽象实现 * @author zhuxl * */public abstract class StartTimerImpl implements StartTimer {    /**     *定时器     */    protected Timer timer;    @Override    public void stopTimer() {        if(timer!=null){            timer.cancel();        }    }    @Override    public void restartTimer() {        startTimer();    }}

而具体的定时器,比如报告生成,代码如下:

@Component("reportTimer")public class ReportTimerImpl extends StartTimerImpl{    private Logger logger=Logger.getLogger(ReportTimerImpl.class);    @PostConstruct    public void init(){        this.startTimer();    }    @Override    public void startNextTimer() {        if(timer!=null){            timer.cancel();            logger.info("报告定时器取消!!");        }        timer=new Timer(true);        Date nextDate=computeNextDate(false);        if(nextDate==null){            logger.info("报告定时器已经关闭!!");            return ;        }        logger.info("报告定时器重新启动,下次执行时间:"+nextDate);        timer.schedule(new ReportTask(),nextDate);    }    /**      * computeNextDate      * @描述: 计算下一次时间      * @作者: zhuxl      * @创建时间: 2016年8月30日      * @return      */    private Date computeNextDate(boolean flag){        ...        //返回下一次任务时间    }    @Override    public void startTimer() {        if(timer!=null){            timer.cancel();            logger.info("报告定时器取消!!");        }        timer=new Timer(true);        Date nextDate=computeNextDate(true);        if(nextDate==null){            logger.info("报告定时器已经关闭!!");            return ;        }        logger.info("报告定时器启动,下次执行时间:"+nextDate);        timer.schedule(new ReportTask(),nextDate);    }}

在使用中需要使用Spring的注解!!!ReportTask为具体的定时任务。在其他需要重启服务的地方重新调用reportTimer.restartTimer()即可;关闭定时器为reportTimer.stopTimer()。

0 0
原创粉丝点击