【Java多线程】$5 定时器 Timer

Timer定时器的使用

主要使用对象有 Timer 和 TimerTask,

Timer
  • schedule(…)
  • scheduleAtFixedRate(…)
  • cancel()

schedule() 相比 scheduleAtFixedRate(), 它不具备 追赶特性 1

cancel() 方法,将会停止执行计划,将 任务队列 2 中全部的任务进行清空。

TimerTask

该类实现了Runnable接口,通过实现 run() 方法来描述需要执行的任务内容。

  • cancel()
    将自身从任务队列中清除
定时任务实现过程浅析

首先通过使用,我们知道 Timer对象通过参数来设置了执行规则,按一定的时间去执行我们的TimerTask线程任务。比如延期执行(delay),在指定时间点执行, 按一个时间轮训执行(period)

我们的TimerTask是一个Runnable,Timer在创建时自定创建了一个线程(TimerThread)去轮训了我们的任务队列,不断的去判断我们的计划任务时间是否符合条件。(详见 java.util.TimerThread#mainLoop 方法实现)


  1. 追赶特性,如果启动的任务在计划任务之后,计划任务到第一次执行的时间段内的计划任务数,将被追加执行,例如 计划时间在 2020-02-09 14:41:11 ,实际启动时间在 2020-02-09 14:41:31,中间相隔 20s,设置 period=2000,即每2s执行一次,那么scheduleAtFixedRate将会追赶执行10次来补偿之前未执行的任务数 ↩︎

  2. 任务队列, Timer对象中定义了一个重要对象 TaskQueue,它存放了需要执行的TimerTask ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值