ScheduledExecutorService 似乎有一个问题,即如果它无法获得空闲线程,则定期任务将延迟发生。对我来说不幸的是,分配给它的定期任务确实需要按计划进行。目前它被安排为每分钟一次,但有时由于应用程序正忙于其他事情(我认为这就是原因),它未能在五分钟内完成,而五分钟恰好是“主要生产错误”阈值。
如何通过优先级或以其他方式控制线程平衡器来强制执行此操作?
ScheduledExecutorService 似乎有一个问题,即如果它无法获得空闲线程,则定期任务将延迟发生。对我来说不幸的是,分配给它的定期任务确实需要按计划进行。目前它被安排为每分钟一次,但有时由于应用程序正忙于其他事情(我认为这就是原因),它未能在五分钟内完成,而五分钟恰好是“主要生产错误”阈值。
如何通过优先级或以其他方式控制线程平衡器来强制执行此操作?
如果您的 ScheduledExecutorService 用于其他任务,或者您的任务有时需要超过 1 分钟才能运行,您可以简单地增加 ScheduledExecutorService 中可用的线程数。因此,如果一项任务尚未完成运行,执行程序仍然可以运行新的任务。
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(10);
(我随机选择了 10 个 - 如果您每分钟运行一次任务并且它最多可以运行 5 分钟,那么这会给您留下一些错误余地)