关于java定时器Timer的疑问,当执行时间大于间隔时间会怎样?

比如我做一个Timer,让它每10秒去数据库查询一次数据,但是查询操作需要15秒才能完成。那么,在第0秒Timer执行第一次操作,在第10秒的时候,是等待第一次操作完成呢... 比如我做一个Timer,让它每10秒去数据库查询一次数据,但是查询操作需要15秒才能完成。那么,在第0秒Timer执行第一次操作,在第10秒的时候,是等待第一次操作完成呢,还是会新建一个线程执行第二次操作? 展开
 我来答
windsun_ul
推荐于2017-09-20
知道答主
回答量:22
采纳率:100%
帮助的人:25.5万
展开全部
这个问题,我正好以前研究过
先回答你的问题:是等待第一次任务执行完
然后细说:

如果你用的是 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); 方法开启
但是不建议这样使用
匿名用户
2013-05-06
展开全部
用一个表示忙碌的变量来判断,如果还在忙碌,跳过这一回
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
llei32wang
推荐于2017-09-10 · TA获得超过2736个赞
知道大有可为答主
回答量:1478
采纳率:60%
帮助的人:1401万
展开全部
看用了timer的哪个方法了。
schedule 方法的话就是任务执行完以后再等待你指定的间隔时间后 再次执行。
scheduleAtFixedRate 方法的话就是等当前执行的任务完成后立刻再次执行任务
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sunyanchao198
2019-12-13
知道答主
回答量:1
采纳率:0%
帮助的人:668
展开全部
先回答你的问题:等待第一次操作完成。
此问题最重要的概念就是:

如果fixedRate模式下,线程池会对要执行的任务做一个排期。
如0min启动,fixedRate =5min
每个任务都排好,
T1 : 0min开始,
T2 : 5min开始,
T3 : 10min开始
。。。。。
如果T1超时 执行到了6min,此时启动T2时,发现6min>5min 则T2立即执行。
若T2仅执行1min, 轮到T3时 7min<10min, T3等待3min再执行
fixed-delay的话,每个任务跟在前一个任务执行完,再间隔固定时间执行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
BS0小陈
2013-05-06 · TA获得超过116个赞
知道小有建树答主
回答量:186
采纳率:0%
帮助的人:108万
展开全部
应该是会等15秒继续执行!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式