Java定时任务之Timer类API详解

 

 

Timer类结构

Timer类里有TimerThread和TaskQueue两个属性。

TaskQueue是一个Task任务队列,用于存放Task任务。

TimerThread继承Thread,用于执行存放在Queue里的Task任务。

Timer定时函数的用法

schedule(TimerTask task, long delay)

   task : 要执行的任务

   delay : 延迟的时间

   作用 : 程序运行之后,延迟delay毫秒后定时任务开始执行,且只执行一次

schedule(TimerTask task, Date time)

   task : 要执行的任务

   time : 执行的时间

   作用 : 当时间到达或者超过time时开始执行任务,且只执行一次

schedule(TimerTask task, long delay, long period)

   task : 要执行的任务

   delay : 延迟的时间

   period : 每次任务执行的间隔

   作用 : 延迟delay毫秒后开始执行任务,之后每间隔period毫秒执行一次任务

schedule(TimerTask task, Date firstTime, long period)

   task : 要执行的任务

   firstTime : 第一次开始执行的时间

   period : 每次任务执行的间隔

   作用 : 从firstTime开始执行任务,之后每period间隔执行一次任务

scheduleAtFixedRate(TimerTask task, long delay, long period)

   task : 要执行的任务

   delay : 延迟的时间

   period : 每次任务的间隔

   作用 : 延迟delay毫秒后开始执行任务,之后每间隔period毫秒执行一次任务

scheduleAtFixedRate(TimerTask task, Date firstTime,long period)

   task : 要执行的任务

   firstTime : 第一次任务执行的时间

   period : 每次任务执行的间隔

   作用 : 从firstTime开始执行任务,之后每period间隔执行一次任务

   scheduleAtFixedRate和schedule函数区别

  1. 当任务开始执行时间小于当前时间时,schedule函数从当前时间开始计时执行,scheduleAtFixedRate函数从设定的时间开始执行,并且为了赶上进度,会瞬间多次执行任务,因此TimerTask任务体需要考虑同步。
  2. 当任务执行需要的时间超过设定每次任务的执行时间间隔时,schedule函数下一次执行时间相对于上一次实际执行完成的时间,因此执行时间会不断后延,而scheduleAtFixedRate函数下一次执行时间相对于上一次开始的时间点,不会后延,因此存在并发性。

  其他函数

     cancel()函数 : 终止计时器,丢弃所有安排的任务,即清空当前Timer的TaksQueue队列。

      purge()函数  : 从Timer中移除所有已取消的任务,即部分TimerTask调用了Task的cancel()方法,取消了那个Task任务的执行,但        是那个Task任务还在Timer的Task队列了,purge函数的作用即将那些任务从队列中清除。

 TimerTask类

run函数 : 要执行的任务逻辑

cancel函数 : 取消当前任务

scheduledExecutionTime函数 : 返回当前任务最近的实际执行时间

Timer存在的缺陷

  1. 管理并发任务的缺陷
  2. 当任务抛出异常时的缺陷

   Timer和Quartz相比,Timer的任务调度只有一个后台线程在执行,而Quartz的任务调度是一个线程池在负责,并且Timer存在并发问题,虽然一个Timer调度器里可以放多个TimerTask任务,但每个任务都是串行执行的,并非并发执行。其次,当TimerTask执行任务时抛出异常会导致程序停止运行,TimerTask并不能捕捉处理异常,而且Timer也没有持久化能力,程序崩溃无法重新恢复崩溃前场景,因此简单定时任务可以使用Timer,复杂调度需要Quartz。

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值