java timer记录运行时间_有关java定时器Timer的疑问,当执行时间大于间隔时间会怎样?...

这个问题,我正好以前研究过

先回答你的问题:是等待第一次任务执行完

然后细说:

如果你用的是 java.util.Timer,那么这个Timer 有两种执行模式:

fixed-rate:对应于 scheduleAtFixedRate 方法

fixed-delay:对应于 schedule 方法

fixed-rate 模式,如果某次任务超时了,它会智能的缩短下一次任务的执行时间,

比如你 10 秒一次任务,但是任务执行了 15 秒,

那么下一次任务如果没有超时的话,可能也不会分配给他完整的 10 秒,而是 5 秒

目的是尽量让后面的任务可以赶上来

任务执行时间可能是这样一个模式:

第一次任务:15 秒(超时)

第二次任务:8 秒(未超时)

第三次任务:7 秒(未超时)

第四次任务:10 秒(未超时)

……

如果你任务一直都在超时,可能每次任务执行完之后,就会立刻执行下一次任务

其实如果你每次任务都超时,你应该考虑的是,

在程序中,就增加任务的延时

fixed-delay 模式,如果你某次任务超时了,也不会影响下一次任务的执行时间

10 秒周期的任务,执行了 15 秒

那下一次任务依然是分配完整的 10 秒

任务执行时间可能是这样一个模式:

第一次任务:15 秒(超时)

第二次任务:10 秒(未超时)

第三次任务:10 秒(未超时)

第四次任务:15 秒(超时)

如果你用的是 javax.swing.Timer,这个是按固定周期触发的

由于这个 Timer 是在 EDT (Java GUI 的事件指派线程)上执行的

EDT 有智能合并任务的处理

如果你某次任务超时了,那么下一次任务将和下下次任务智能合并成一个任务

比如 10 秒周期的任务,执行了 15 秒

任务执行时间可能是这样一个模式:

第一次任务:20 秒(超时)

第二次任务:合并

第三次任务:10 秒(未超时)

……

其实 javax.swing.Timer 也有 Fixed Rate 模式,

可以通过 setCoalesce(false); 方法开启

但是不建议这样使用

取消

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值