现在的位置: 首页 > 综合 > 正文

Timer与ScheduledExecutorService间的选择

2018年05月12日 ⁄ 综合 ⁄ 共 462字 ⁄ 字号 评论关闭

java.util.Timer计时器有管理任务延迟执行("如1000ms后执行任务")以及周期性执行("如每500ms执行一次该任务")。

但是,Timer存在一些缺陷,因此你应该考虑使用ScheduledThreadPoolExecutor作为代替品,Timer对调度的支持是基于绝对时间,而不是相对时间的,

由此任务对系统时钟的改变是敏感的;ScheduledThreadExecutor只支持相对时间。


Timer的另一个问题在于,如果TimerTask抛出未检查的异常,Timer将会产生无法预料的行为。

Timer线程并不捕获异常,所以TimerTask抛出的未检查的异常会终止timer线程。

这种情况下,Timer也不会再重新恢复线程的执行了;它错误的认为整个Timer都被取消了。

此时,已经被安排但尚未执行的TimerTask永远不会再执行了,新的任务也不能被调度了。

 

timer的bug:60秒执行一次的话,如果用户修改了时间的话 那么时针都会归0,本来是临近10秒执行的时候timer又会重新计时一次 再等60才执行。

抱歉!评论已关闭.