定期安排计时器任务

时间:2014-04-24 08:19:00

标签: java multithreading

只是为了确定:

void java.util.Timer.schedule(TimerTask task, Date firstTime, long period)

如果我的任务比period参数花费的时间更长,那么计时器不会启动一个新的并行线程,对吧?它等待任务完成并立即开始。

2 个答案:

答案 0 :(得分:2)

你是对的。来自documentation

  

对应每个Timer对象是一个后台线程   用于按顺序执行所有计时器的任务。计时器任务   应该快点完成。如果计时器任务需要过多的时间   完成,它"猪#34;计时器的任务执行线程。这可以,在   转,延迟后续任务的执行,这可能会导致后续任务的结束。   当(和如果)违规任务快速连续执行   终于完成了。

如果您希望自己的任务可能需要更长时间并且应该排队,我建议您使用ExecutorService

答案 1 :(得分:1)

两件事,首先你应该使用ScheduledExecutorService或者像石英这样的调度程序来安排作业。关于您的问题,句点是连续任务执行之间的时间(以毫秒为单位)。

考虑一个示例,您已安排任务在上午10:00开始,延迟时间为10分钟。假设第一次执行需要10分钟才能完成,即上午10:10然后第二次执行将在上午10:20开始。