【Java学习笔记(八十四)】 之 Timer定时器,TimerTask任务

本文章由公号【开发小鸽】发布!欢迎关注!!!


老规矩–妹妹镇楼:

一. Timer定时器

(一) 概述

       JDK库中,Timer类负责计划任务,即确定在指定的时间开始执行某一个任务,而任务代码需要封装在TimeTask类的子类中。

(二) Timer类的方法

1. schedule(TimeTask task, Date time)

       在指定的日期执行一次任务,当指定的日期早于当前的时间时,它会从当前时间开始执行;当指定的日期晚于当前的时间时,它会从指定的日期开始执行。对于多个TimeTask任务,这些任务是以队列的方式按照顺序执行的,因此后面的任务执行的时间可能要随着每个任务的耗时来决定,可能有任务会超时导致后面的任务延时启动。

创建TimerTask类的子类:

package timer;

import java.sql.Timestamp;
import java.util.Date;
import java.util.TimerTask;

public class MyTaskA extends TimerTask {
    @Override
    public void run() {
        System.out.println("A start " + new Date());
        System.out.println("A end " + new Date());
    }
}

创建测试类:

package timer;

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;

public class Test {
    public static void main(String[] args) {
        System.out.println("当前时间 " + new Date());
        Calendar calendar = Calendar.getInstance();
        Date time = calendar.getTime();
        System.out.println("A计划时间 " + time);
        MyTaskA myTaskA = new MyTaskA();
        Timer timer = new Timer();
        timer.schedule(myTaskA, time);
    }
}

2. schedule(TimerTask task, Date firstTime, long period)

       在指定的日期之后按指定的间隔周期,无限循环地执行某一任务。如果计划时间早于当前时间,则立即执行任务,且循环执行;如果计划时间晚于当前时间,则在计划时间循环执行任务;若任务耗时超过了间隔时间,则下一个任务的开始时间以超时的任务结束时间为准。

3. cancel()

       Timer类的cancel()方法将任务队列中的所有任务都清空,且进程被销毁。不过有时cancel()方法也抢不到queue锁,让任务正常执行,总会有这样的情况出现。

       TimerTask类的cancel()方法将自身这个任务从任务队列中清除。

4. schedule(TimerTask task , long delay)

       以执行schedule方法当前的时间为基准,在此基础上延迟指定的毫秒数后执行一次TimerTask任务。


5. schedule(TimerTask task . long delay, long period)

       以执行schedule方法当前的时间为基准,在此基础上延迟指定的毫秒数后循环执行TimerTask任务。

6. scheduleAtFixedRate方法与 schedule方法的区别

       scheduleAtFixedRate方法具有追赶性,当任务的计划时间在当前时间之前时,schedule直接从当前时间开始执行,忽略计划时间到当前时间之间的任务。而scheduleArFixedRate方法会将计划时间到当前时间之间的任务补充性地执行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值