在旧的完成之前,是否有可能不重复时间任务?

时间:2014-03-27 14:43:19

标签: java

我有一个定时任务,可能需要一些时间来执行其任务,有时超过我设置的间隔。

timer.schedule(new ConnectionCheckerThread(), 0,interval);

我看到如果一个线程仍在其run()方法中,则在interval之后执行另一个线程。 我不希望这样。我希望另一个线程在上一个完成时启动JUST。

有可能吗?

2 个答案:

答案 0 :(得分:2)

如果上一个任务仍在运行,TimerTask将不会启动另一个线程,它应该将其排队以便稍后执行。

根据documentation

  

对应每个Timer对象是一个后台线程,用于按顺序执行所有计时器的任务。计时器任务应该快速完成。如果计时器任务花费过多时间来完成,它会“占用”计时器的任务执行线程。反过来,这可以延迟后续任务的执行,这些后续任务可能会在违规任务最终完成时(以及如果)快速连续地“聚集”并执行。

无论如何,最好使用newSingleThreadScheduledExecutor代替。

注意:您不需要为定期执行安排任务,在完成当前任务后,您可以简单地schedule下一个任务执行单个执行。

答案 1 :(得分:0)

在实例化新线程之前,定期检查线程是否仍然存在Thread.isAlive()