Timer简介

2019/10/24 14:28
阅读数 46

Timer类是Java提供线程用于定时任务调用的工具类。

Timer类是线程安全的。
Timer类使用二进制堆数据结构来存储任务。

Timer类构造函数
Timer():创建一个新的计时器
Timer(boolean isDaemon):创建一个新的计时器,可以指定其关联的线程作为守护程序运行
Timer(String name):创建一个新的计时器,其关联的线程具有指定的名称
Timer(String name,boolean isDaemon):创建一个新的计时器,其关联的线程具有指定的名称,并且可以指定作为守护程序运行

Timer类的方法
cancel():终止此计时器,丢弃当前计划的任何任务。不会干扰当前正在执行的任务(如果存在)。一旦计时器终止,它的执行线程就会正常终止,并且不再可以在其上安排任务。
purge(): 从此计时器的任务队列中删除所有已取消的任务。
schedule(TimerTask task, Date time):计划在指定时间执行的指定任务。其中task表示要安排的任务,time表示执行任务的时间。
schedule(TimerTask task, Date firstTime, long period):从指定的时间开始,为重复的固定延迟执行安排指定的任务。其中firstTime第一次执行任务的时间,period表示连续任务执行之间的时间(以毫秒为单位)
schedule(TimerTask task, long delay):在指定的延迟语法后调度指定的任务执行。其中delay表示执行任务前的延迟(以毫秒为单位)。
schedule(TimerTask task, long delay, long period):在指定的延迟语法后开始,为重复的固定延迟执行安排指定的任务。
scheduleAtFixedRate(TimerTask task,Date firstTime,long period):从指定时间开始,为重复的固定速率执行调度指定的任务。
scheduleAtFixedRate(TimerTask task, long delay, long period):在指定的延迟语法后开始,为重复的固定速率执行调度指定的任务。

schedule()和scheduleAtFixedRate()区别
相同点
1、方法schedule 和方法 scheduleAtFixedRate 都会按顺序执行,所以不用考虑非线程安全的情况。
2、方法schedule 和方法 scheduleAtFixedRate 如果执行任务的时间没有被延迟,那么下一次任务的执行时间参考的是上一次的任务的"开始"时的时间来计算的。
3、方法schedule 和方法 scheduleAtFixedRate 如果执行任务的时间被延迟了,那么下一次任务的执行时间参考的是上一次任务"结束"时的时间来计算。

不同点
schedule 和 scheduleAtFixedRate在使用上基本没什么差别,scheduleAtFixedRate 具有追赶执行性,如果任务在周期性运行过程中被打断了,scheduleAtFixedRate会尝试把之前落下的任务补上运行。而schedule就不管了,接着运行接下来的任务就行了。 

如何理解schedule和scheduleAtFixedRate的案例
暑假到了老师给schedule和scheduleAtFixedRate两个同学布置作业,老师要求学生暑假每天写2页,30天后完成作业。这两个学生每天按时完成作业,直到第10天,出了意外,两个学生出去旅游花了5天时间,这5天时间里两个人都没有做作业。任务被拖延了。这时候两个学生采取的策略就不同了:
schedule重新安排了任务时间,旅游回来的第一天做第11天的任务,第二天做第12天的任务,最后完成任务花了35天。
scheduleAtFixedRate是个守时的学生,她总想按时完成老师的任务,于是在旅游回来的第一天把之前5天欠下的任务以及第16天当天的任务全部完成了,之后还是按照老师的原安排完成作业,最后完成任务花了30天。

参考资料
1、Java中的Java.util.Timer类:https://www.breakyizhan.com/java/4900.html
2、Java 定时器 Timer 的使用:https://www.cnblogs.com/jmcui/p/7519759.html
3、简单理解java中timer的schedule和scheduleAtFixedRate方法的区别:http://www.cnblogs.com/snailmanlilin/p/6873802.html

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部