【发布时间】:2012-08-03 22:08:30
【问题描述】:
ScheduledExecutorService 似乎存在这样的问题,即如果它无法获得空闲线程,则周期性任务将延迟发生。对我来说不幸的是,它分配给的定期任务确实需要按计划进行。目前它被安排为每分钟一次,但有时由于应用程序正忙于其他事情(我认为这就是原因)它未能在五分钟内完成,而五分钟恰好是“主要生产错误”阈值。
如何通过优先级或以其他方式控制线程平衡器来强制执行此操作?
【问题讨论】:
-
您的 ScheduledExecutorService 是否用于除该任务之外的任何其他任务?您的任务是否总是在 1 分钟内完成?
-
信息不足。你实际上是如何调度线程的?显示一些代码。
-
@assylias - 宾果游戏。在这个任务上还有另一个任务需要很长时间,我将它编程为只使用一个线程,这样我就可以避免一些并发编码问题。我可以通过将其移至单独的执行程序服务来解决。您可以将此作为答案发布,我会接受,因为这两个问题正是要问的。
-
@djechlin “我将它编程为只使用一个线程,这样我就可以避免一些并发编码问题。” => 你的任务无论如何都会在它自己的线程中运行,所以增加执行程序使用的线程数不应该带来任何问题,而只有一个线程不会出现(除非我遗漏了有关您所做工作的一些细节)。
-
@assylias 有 3 个任务在此服务上运行。紧急的是轻量级,可以并发运行没问题。另外两个都在修改同一个集合,并且没有仔细编程。因此,紧急任务可以转移到它自己的服务并获得它自己的线程,只要两个冲突的任务保持单线程(或者除非我努力使它们可并行化,这在这一点上是不值得的)。跨度>
标签: java multithreading scheduling