我有一个定时任务,可能需要一些时间来执行其任务,有时超过我设置的间隔。
timer.schedule(new ConnectionCheckerThread(), 0,interval);
我看到如果一个线程仍在其run()方法中,则在interval之后执行另一个线程。 我不希望这样。我希望另一个线程在上一个完成时启动JUST。
有可能吗?
答案 0 :(得分:2)
如果上一个任务仍在运行,TimerTask将不会启动另一个线程,它应该将其排队以便稍后执行。
对应每个Timer对象是一个后台线程,用于按顺序执行所有计时器的任务。计时器任务应该快速完成。如果计时器任务花费过多时间来完成,它会“占用”计时器的任务执行线程。反过来,这可以延迟后续任务的执行,这些后续任务可能会在违规任务最终完成时(以及如果)快速连续地“聚集”并执行。
无论如何,最好使用newSingleThreadScheduledExecutor代替。
注意:您不需要为定期执行安排任务,在完成当前任务后,您可以简单地schedule下一个任务执行单个执行。
答案 1 :(得分:0)
在实例化新线程之前,定期检查线程是否仍然存在Thread.isAlive()
。