定时器:Timer、quartz

定时器通常使用于数据监控,认证周期外包的项目卖给客户(按年收费)等等…

Timer

java.util包中提供的定时器

//指定延迟时间后执行
public void timerMethod(){
    //创建一个定时器对象
    Timer timer = new Timer();
    //创建定时器要执行的任务
    TimerTask task = new TimerTask() {
        @Override
        public void run() {
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String dateTime = df.format(new Date());
            System.out.println(dateTime);
        }
    };
    //指定定时器要做的任务及开始时间 参数一:任务 参数二:延迟时间 参数三:执行周期
    timer.schedule(task, 3000,1000);
}
quartz

由第三方提供的定时器

1、创建一个SchedulerFactory对象用于生产Scheduler对象 : Scheduler

2、创建调度所需要的任务 : JobDetail

3、指定开始的时间和执行周期 :Trigger


/**
 * 在Trigger的子接口SimpleTrigger中提供了一个方法叫getRepeatCount()用于获取设置的重复次数
 */
public class Task implements Job{

	static int count = 0;
	@Override
	/**
	 * 调用任务
	 * context中包含了定时器中所有的对象
	 */
	public void execute(JobExecutionContext context) throws JobExecutionException {
		count++;
		System.out.println("1s执行一次 ");
	}

}

public static void main(String[] args) throws SchedulerException {
    //创建任务调度对象
    SchedulerFactory schedFact = new StdSchedulerFactory();
    Scheduler sched = schedFact.getScheduler();
    sched.start();

    //创建调度任务---Job
    JobDetail jd = JobBuilder.newJob(Task.class)
        //给任务一个唯一标识 参数二代表任务所在的组 参数一代表该任务的名称
        .withIdentity("task01", "task")
        .build();

    //指定任务的执行时间及周期
    SimpleTrigger trigger = TriggerBuilder.newTrigger()
        .withIdentity("trigger01", "task")
        //开始执行的时间 startNow立即执行 startAt(Date)指定时间执行
        .withSchedule(
        //SimpleSchedule可以允许用户自定义执行周期
        SimpleScheduleBuilder.simpleSchedule()
        .withIntervalInSeconds(1)
        //.repeatForever())
        .withRepeatCount(3))
        .build();

    //将任务与对应的执行周期进行关联
    sched.scheduleJob(jd, trigger);

    try {
        Thread.sleep(5000);
        System.out.println(Task.count);
        if(trigger.getRepeatCount() == (Task.count-1)) {
            sched.shutdown(true);
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
Timer和Quartz的区别

1、Timer是java.util包自带的定时器,quartz是一个第三方提供的定时器

2、Timer的任务是通过创建TimerTask子类进行实现,quartz则必须要新建一个class文件实现Job接口重写execute方法定义任务

3、Timer只能控制执行的周期及开始时间,而quartz可以灵活、准确的控制日期节点以及执行次数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值