《JAVA多线程编程核心技术》 笔记:第五章:定时器Timer

一、定时器Timer的使用

1.1 方法schedule(TimerTask task, Date time)

是否过期执行说明开始执行时间
time>当前时间(未过期)在time到达时执行time(未被延期)
time<当前时间(已过期)当前时间立即执行当前时间(被延期)

注意:TimeTask以队列的方式一个一个被顺序执行。

如果前一个任务执行时间过长,则后面的任务开始执行时间会被延期。和计划时间不同。(这可能也是当time<当前时间时,任务会被立即执行的原因)

1.2 方法schedule(TimerTask task, Date firstTime, long period)

开始执行时间:同上

是否过期执行说明开始执行时间
firstTimetime>当前时间(未过期)在time到达时执行time(未被延期)
firstTimetime<当前时间(已过期)当前时间立即执行当前时间(被延期)

下一次执行时间:同上

是否过期执行说明开始执行时间实际执行间隔
任务执行时间<时间间隔
(即:下一次计划执行时间>当前时间)
【不延时】
下一次计划执行时间到达时执行下一次计划执行时间计划的间隔时间
任务执行时间>时间间隔
(即:下一次计划执行时间<当前时间)
【延时】
上一次执行完之后立即执行当前时间任务的执行时间

1.3 方法schedule(TimerTask task, long delay)的测试

方法作用:以执行 方法schedule(TimerTask task, long delay)的当前时间为参考时间,在此基础上延迟指定的毫秒数后执行一次TimerTask任务。

开始执行时间:当前时间+延迟时间

只执行一次,所以,无下一次任务执行情况

1.4 方法schedule(TimerTask task, long delay, long period)的测试

方法作用:以执行 方法schedule(TimerTask task, long delay, long period)的当前时间为参考时间,在此基础上延迟指定的毫秒数,再以某一间隔时间无限次地后执行某一任务。(只有第一次执行需要延迟delay,以后执行都是以period为周期间隔)

由于任务执行时间有延迟,所以对于下一次任务执行的开始时间。就不是很确定了。

下一次执行时间:同schedule(TimerTask task, Date firstTime, long period)的下一次执行时间

1.5 cancel()方法

方法TimerTask类Timer类
cancel()方法将自身从任务队列中清除将任务队列中的全部任务清空;
注意:如果Timer类的cancel()方法没有争抢到queue锁,那么TimerTask类中的代码逻辑会继续执行。

1.6 方法scheduleAtFixedRate(TimerTask task, Date firstTime, long period)的测试

1.6.1 基本信息和对比

方法schedule和方法scheduleAtFixedRate:都会按照顺序执行,所以不会线程不安全;

延时的情况:都是立即执行,没有什么区别。

不延时的情况。

方法下一次任务的执行时间
schedule参考上一次任务“开始”时的时
scheduleAtFixedRate参考的是上一次任务“结束”时的时间

对比说明:

属性schedulescheduleAtFixedRate
下一次任务的执行时间【延时】立即执行立即执行
下一次任务的执行时间【不延时】schedule【Date】参考上一次任务“开始”时的时间
schedule【Long】参考上一次任务“结束”时的时间
因为Long表示延迟时间,Date表示开始时间
schedule【Date】参考上一次任务“开始”时的时间
schedule【Long】参考上一次任务“结束”时的时间
因为Long表示延迟时间,Date表示开始时间
追赶执行性(主要区别)

1.6.2 追赶执行性:

这么说吧,任务计算在13:00执行,每2s执行一次,现在时间是13:20。

如果不具有追赶执行性:就是在13:00-13:20这段时间内,任务没执行就算了。从当前时间开始,任务继续执行。

如果具有追赶执行性:就是在13:00-13:20这段时间内,没执行的任务需要被补充执行。从当前时间开始,先补充执行对应时间段内应该被执行的次数,然后任务开始继续正常执行。

END!

转载于:https://www.cnblogs.com/buwuliao/p/9538268.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值