Java多线程编程核心技术 —— 定时器Timer

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lkp1603645756/article/details/84579779

定时器Timer

在JDK库中Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务。

Timer类的主要作用就是设置计划任务,但封装任务的类却是TimerTask类。

执行计划任务的代码要放入TimerTask的子类中,因为TimerTask是一个抽象类。

1、方法schedule(TimerTask task,Date time)的作用是在执行的日期执行一次某一任务。

2、查看构造方法可以得知,创建一个Timer就是启动一个新的线程,这个新启动的线程并不是守护线程,它会一直在运行。

创建new Timer(true);传入一个true,就表示创建的是守护线程。程序 运行后迅速结束当前的进程,并且如果TimerTask中的任务不再被运行,因为进程以及结束了。

3、如果执行任务的时间早于当前时间,则立即执行TimerTask定时任务。

扫描二维码关注公众号,回复: 4552475 查看本文章

4、TimerTask是以队列的方式一个一个被顺序执行的,所以执行的时间有可能和预期的时间不一致,因为前面的任务有可能消耗的时间较长,则后面的任务运行的时间也会被延迟。

5、方法 schedule (TimerTask task , Date firstTime , long period) 的作用是在指定的日期之后,按指定的间隔周期性地无限循环地执行某一个任务。

6、TimerTask类中的cancel() 方法的作用是将自身从任务队列中清除,其他任务不受影响。

7、和TimerTask类中的 cancel() 方法清楚自身不同,Timer类中的 cancel() 方法的作用是将任务队列中的全部任务情况。

8、Timer类中的cancel()方法有时并不一定会停止执行计划任务,而是正常执行。因为Timer类中的cancel()方法有时并没有争抢到queue锁,所以TimerTask类中的任务继续正常执行。

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

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

凡是使用方法中带有period参数的,都是无限循环执行TimerTask中的任务。

11、方法scheduleAtFixedRate(TimerTask task,Date firstTime,long period)。

方法schedule和方法scheduleAtFixedRate都会被按顺序执行,所以不要考虑非线程安全的情况。

方法schedule和scheduleAtFixedRate主要的区别只在于不延时的情况。

使用schedule方法:如果执行任务的时间没有被延时,那么下一次任务的执行时间参考的是上一次任务的“”开始“”时的时间来计算。

使用scheduleAtFixedRate方法:如果执行任务的时间没有被延时,那么下一次任务的执行时间参考的是上一次任务的“”结束”时的时间来计算。

延时的情况则没有区别,也就是使用schedule或scheduleAtFixedRate方法都是如果执行任务的时间被延时,那么下一次任务的执行时间参考的是上一次任务“结束”时的时间来计算。

12、schedule方法不具有追赶执行性

13、scheduleAtFixedRate方法具有追赶执行性

左侧有我的公众号二维码,微信扫一扫即可关注,每天都会分享技术文章,一起成长。

如果有错误的地方,还请不吝赐教,非常感谢~


欢迎访问我的CSDN博客,让我们一同成长!

“不管做什么,只要坚持下去就会看到不一样!”

猜你喜欢

转载自blog.csdn.net/lkp1603645756/article/details/84579779