Fork me on GitHub

Timer TimerTask 问题

Timer在执行所有定时任务时只会创建一个线程。如果某个任务的执行时间过长,那么将破坏其他TimerTask的定时精确性。
例如周期每10ms跑一次的TimerTask,而另外一个需要执行40ms,那么这个周期任务或者在40ms任务执行完成连续调用4次,要不就是丢失4次调用(取决于它是基于固定速率来调度还是基于固定延时来调度)。
Timer的另外一个问题是,如果TimerTask抛出一个未检查的异常,那么Timer线程并不捕获异常,因此当TimerTask抛出未检查的异常时将终止定时线程。这种情况下,Timer也不会恢复线程的执行,而是会错误地认为整个Timer都被取消了。
因此已经被调度但未执行的TimerTask将不会再执行,新的任务也不能调度。这个问题称为“线程泄漏” 【Thread Leakage】

本文欢迎转载,但是希望注明出处并给出原文链接。 如果你有任何疑问,欢迎在下方评论区留言,我会尽快答复。 如果你喜欢或者不喜欢这篇文章,欢迎你发邮件到 alonecong@126.com 告诉我你的想法,你的建议对我非常重要。

------ 本文结束感谢您的阅读! ------
0%