等待Timer在Java中完成

rip*_*234 12 java synchronization timer monitor

我正在使用java.util.Timer来安排定期任务.有一次,我想关闭它,等待它完成.

Timer.cancel()将阻止任何未来的任务运行.我如何确保当前没有任何任务正在运行(如果是的话,还是等待它们?)

我可以引入外部同步机制,但我不知道它们如何涵盖所有情况.例如,如果我在任务中的某个Monitor上进行同步,我仍然会错过任务刚刚开始执行但没有使用监视器的情况.

等待所有任务真正完成的建议做法是什么,包括当前正在运行的任务?

Mar*_*ark 22

您最好使用ScheduledExecutorService而不是Timer来安排定期任务.ScheduledExecutorService提供了一个shutdown()方法,该方法将执行任何挂起的任务.然后,您可以调用awaitTermination()以等待shutdown()完成.

  • 是的,Effective Java(第2版)中的第68项建议使用ScheduledThreadPoolExecutor作为Timer的更灵活的替代品.提及此+1,因为要求推荐的做法. (2认同)