强制在Java应用程序中定期执行定期任务

时间:2012-08-06 22:12:38

标签: java multithreading scheduling

ScheduledExecutorService似乎有这样的问题:如果它无法获得一个免费线程,那么周期性任务将会延迟发生。对我来说不幸的是,它所分配的周期性任务确实需要按时完成。目前它每分钟计划一次,但有时由于应用程序忙于处理其他事情(我认为这就是原因)它未能在五分钟内完成,而五分钟恰好是“主要的生产错误”阈值。 / p>

如何通过优先排序或以其他方式控制线程平衡器来强制执行此操作?

1 个答案:

答案 0 :(得分:2)

如果您的ScheduledExecutorService用于其他任务,或者您的任务有时需要超过1分钟才能运行,您可以简单地增加ScheduledExecutorService中可用的线程数。因此,如果一个任务尚未完成运行,执行程序仍然可以运行一个新任务。

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(10);

(我随机选择了10个 - 如果你每分钟都运行一次任务,它可以运行最多5分钟,这会留下一些误差)