util包下Timer类的延迟执行

Posted zzb-yp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了util包下Timer类的延迟执行相关的知识,希望对你有一定的参考价值。

Timer类是用来做定时器的关键类,其实质是在线程中定时调用任务方法的实现。

timer.schedule(TimerTask,int,int)实现的是循环调用任务方法,在TimerTask中就是一个线程的run()方法,需要自己重写,第二个参数是从多少毫秒开始执行run(),第三个参数是执行完run()后多少毫秒再次执行。

技术分享图片

timer.schedule(TimerTask,int)实现的是单次定时调用任务方法,在TimerTask中就是一个线程的run()方法,需要自己重写,第二个参数是从多少毫秒后开始执行run()。

技术分享图片

timer.scheduleAtFixedRate(TimerTask,int,int)实现的是循环调用任务方法,在TimerTask中就是一个线程的run()方法,需要自己重写,第二个参数是从多少毫秒开始执行run(),第三个参数是执行完run()后多少毫秒再次执行。与上面timer.schedule(TimerTask,int,int)功能上相似,实质上前者的执行时间是当前应该通过的时间,而后者的执行时间是当前实际通过的时间。例如:规定每隔5秒调用一次任务,当调用到5次的时候,分别在5,10,15,20,25秒的时候调用任务,但是由于某种原因在5秒的时候程序没有调用而在7秒的时候调用,这样算来下一次的调用时间是12秒,不是原来的第10秒,当第25秒的时候才只调用了4次任务方法,而理论上应该调用5次。也就是说当执行任务超点或者早点的时候,前者能够灵活调用任务使得在规定计算出的时间内达到规定的调用次数,而后者只能按照超点或早点的时间计算,这样后者就可能会少调用或多调用任务次数。

 

以上是关于util包下Timer类的延迟执行的主要内容,如果未能解决你的问题,请参考以下文章

java.util.Timer简介

threading.Timer 延迟执行实例代码

分布式定时任务

如何在没有 java.util.Timer 的情况下实现延迟的未来?

JUC源码解析ScheduledThreadPoolExecutor

Timer 的简单使用