java 任务调度timer_Java定时任务调度

fa25cdcb618d2a2c9036a5b72e4cf1e6.png

前言基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行任务。

Timer

Timer定义A facility for threads to schedule tasks for future execution in a background thread. Tasks may be scheduled for one-time execution, or for repeated execution at regular intervals.

有且仅有一个后台线程对多个业务线程进行定时定频率的调度

Timer构造方法Timer() 创建一个新计时器

Timer(boolean isDaemon) 创建一个新计时器,可以指定其相关的线程作为守护程序运行。isDaemon:如果应该将相关的线程作为守护程序运行,则为 true

Timer(String name) 创建一个新计时器,其相关的线程具有指定的名称

Timer(String name,boolean isDaemon)创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行。name 相关线程的名称。isDaemon - 如果应该将相关的线程作为守护程序运行,则为 true。

调度方法 schedule的四种用法public void schedule(TimerTask task, long delay, long period) 安排指定的任务从指定的延迟后开始进行重复的 固定延迟执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。

demoschedule(TimerTask task, Date time) 安排在指定的时间执行指定的任务。如果此时间已过去,则安排立即执行该任务。

schedule(TimerTask task, Date firstTime, long period) 时间等于或超过fisrtTime是执行task,之后每隔period重复执行一次task。

schedule(TimerTask task, long delay) 等待delay毫秒后执行且仅执行一次task。

schedule(TimerTask task, long delay, long period) 等待delay毫秒后首次执行task,之后每隔period毫秒重复执行一次task。

scheduleAtFixedRate

首次执行时间早于当前时间

schedule(TimerTask task, Date firstTime, long period)方法只能从当前时间开始执行,比如要当前时间是12:00:06,firstTime设为12:00:00,period设为2秒,那么schedule方法就不能执行firstTime到当前时间的三次task。

而scheduleAtFixedRate(TimerTask task, Date firstTime, long period)在如果第一次执行时间被delay了,随后的执行时间会按照上一次任务开始的时间进行计算,并且为了赶上进度会多次执行任务。在方法调用时会立刻执行三次task。

执行任务的时间超过执行任务的period

schedule(TimerTask task, long delay, long period)方法的下次执行时间是在上一次任务结束period后 开始执行下一次任务。而scheduleAtFixedRate是在上一次任务开始period后执行下一次task。存在并发性。

Timer的缺点

timer只有一个后台线程,管理并发任务存在缺馅;当一个task抛出异常时,其他的任务就不能执行了;不支持每周特定一天去执行任务。定时设置存在局限性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值