Java定时任务的简单实现

 

Java定时任务的简单实现  

2011-01-02 18:34:43|  分类: 软件开发 |  标签:void  timer  import  param  dateutil   |字号大中小 订阅

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秒执行一次的定时任务就搞定了,简单吧?(当然最好还是用框架里面提供的定时任务处理方法)

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。 Quartz的优势: 1、Quartz是一个任务调度框架(库),它几乎可以集成到任何应用系统中。 2、Quartz是非常灵活的,它让您能够以最“自然”的方式来编写您的项目的代码,实现您所期望的行为 3、Quartz是非常轻量级的,只需要非常少的配置 —— 它实际上可以被跳出框架来使用,如果你的需求是一些相对基本的简单的需求的话。 4、Quartz具有容错机制,并且可以在重启服务的时候持久化(”记忆”)你的定时任务,你的任务也不会丢失。 5、可以通过Quartz,封装成自己的分布式任务调度,实现强大的功能,成为自己的产品。6、有很多的互联网公司也都在使用Quartz。比如美团 Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度。   课程说明:在我们的日常开发中,各种大型系统的开发少不了任务调度,简单的单机任务调度已经满足不了我们的系统需求,复杂的任务会让程序猿头疼, 所以急需一套专门的框架帮助我们去管理定时任务,并且可以在多台机器去执行我们的任务,还要可以管理我们的分布式定时任务。本课程从Quartz框架讲起,由浅到深,从使用到结构分析,再到源码分析,深入解析Quartz、Spring+Quartz,并且会讲解相关原理, 让大家充分的理解这个框架和框架的设计思想。由于互联网的复杂性,为了满足我们特定的需求,需要对Spring+Quartz进行二次开发,整个二次开发过程都会进行讲解。Spring被用在了越来越多的项目中, Quartz也被公认为是比较好用的定时器设置工具,学完这个课程后,不仅仅可以熟练掌握分布式定时任务,还可以深入理解大型框架的设计思想。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值