Java多线程_06 定时线程的任务调度

本文详细介绍了Java中的Timer类用于定时任务调度的功能,包括schedule()方法和scheduleAtFixedRate()方法的使用。区别在于schedule()在任务延迟时间已过时从当前时间开始执行,不补充未执行的任务,而scheduleAtFixedRate()则会追加并立即执行错过的任务。通过示例代码展示了两种方法的不同行为,并解释了它们在实际应用中的应用场景。

定时线程的任务调度


Timer
线程调度任务以供将来在后台线程中执行的功能。任务可以安排一次执行,或定期重复执行。

对应于每个Timer对象是单个后台线程,用于依次执行所有定时器的所有任务。

定时线程schedule(),延时不追加执行任务。
定时线程scheduleAtFixedRate(),延时追加执行任务。
不追加执行任务的意思是,如果我们定时线程的首次调度时间已经过去了,那么就立即从当前时刻算起,每隔一段时间调度一次任务,之前没执行的就忽略了;而追加执行任务就是之前没执行的要补充回来。

方法说明
void schedule(TimerTask task, Date firstTime, long period)从指定的时间开始 ,对指定的任务执行重复的固定延迟执行 。

演示:
创建一个TimerTask实现类

/*
 * TimerTask也实现了Runnable接口
 * Timer的对象实现定时调度的方式有两种:
 * schedule():延时不追加执行任务
 * scheduleAtFixedRate():延时追加执行任务
 */
public class UserTask extends TimerTask {
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + new Date());
    }
}
/**
 * @Author: Forward Seen
 * @CreateTime: 2022/03/26 18:17
 * @Description:
 * 延时不追加任务意思是
 * 当我们设置定时创建线程时,如果我们设置的这个时间已经过时了,我们start时就从当前时间开始计时
 * 比如,我设置的时间是一个小时前,那么如果我现在启动start方法,那就相当于定时的时间是当前
 */
public class Test {
    /**
     * 这里的schedule方法有3个参数
     * 第一个是TimerTask对象,run方法就在这个对象里,即执行任务的线程对象;
     * 第二个是时间的参数,就是定时执行任务的时间
     * 第三个是执行任务的间隔,单位是毫秒 比如,3000就是每隔3秒执行一次任务
     */
    public static void main(String[] args) throws ParseException {
        Timer t = new Timer();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date date = sdf.parse("2022-3-26 18:24:59");
        t.schedule(new UserTask(),date,5000);
    }
}

如果当前时间没到18:24:59,那么它会等到该时间首次调度任务,然后每隔5000毫秒调度一次;
在这里插入图片描述
如果当前时间已经过了18:24:59,那么它会立即调度任务,但是不会补充期间本应该调度的任务,然后每隔5000毫秒调度一次。
在这里插入图片描述
schedule()换成scheduleAtFixedRate()

t.scheduleAtFixedRate(new UserTask(),date,5000);

对于scheduleAtFixedRate(),如果当前时间已经过了18:24:59,那么它会立即调度任务,同时它会追加期间本应该调度的任务,然后每隔5000毫秒调度一次。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值