【发布时间】:2012-11-17 12:52:03
【问题描述】:
我有一个运行 2 个独立的独立 java 轮询工具的场景,它会以 5 分钟的固定间隔运行一些特定的任务。
我的场景是(对于每个轮询服务):
1) 如果一个任务 T0 需要超过 5 分钟才能运行,同时在 5 分钟后 T5 来尝试执行,我会丢弃它,而不是等待,或者重新启动(丢弃重叠任务)
2) 下一个任务会在 T10 正常开始。
我的问题是使用 Quartz 会不会是大材小用?如果我使用 TaskExecutorService,我如何在时间 X 上检查一旦在时间 X-5 开始的任务已经在运行,我应该丢弃它。
注意: 1)我必须使用JDK
2) 我没有在 spring 之类的任何框架下使用。
3) 它是一个桌面工具,所以我需要启动它,它会运行..
任何代码 sn-p 或方向表示赞赏。
已更新以下评论的答案:
是的,它在单个工具中运行的任务之间。工具不同,工具之间没有联系,它们会单独运行,没有关系。
单个工具以 5 分钟的间隔运行相同的任务(就像每个文件分钟一样,它会在目录中查找文件,如果找到,则解析这些文件并使用它们)。
如果,例如,如果任务当前正在运行,从第一分钟开始(可能需要任何时间),5 分钟后该工具再次启动该任务以寻找新文件,但这次它不会解析/使用它,因为先前的任务已经在运行处理一些文件。所以新任务将不会执行并且系统将转储它(没有队列/没有等待/没有顺序作业)。
另一个新任务将以 5 倍的时间再次运行,如果没有其他任务在运行,它将解析和处理这些文件。
【问题讨论】:
-
当你说放弃一个任务时,它是在单个工具中运行的任务之间吗?为什么需要丢弃它?你有不同的任务吗?如果您在 5 分钟的间隔内运行相同的任务,那么保证一个任务在第一个任务完成后 5 分钟运行对您有好处吗?
标签: java multithreading scheduled-tasks