【问题标题】:Implementing a scheduler that blocked until all the tasks are completed before taking in new tasks实施一个调度程序,在接受新任务之前阻塞直到所有任务完成
【发布时间】:2012-05-26 08:19:10
【问题描述】:

我对使用 Java SchedulerThreadPoolExecutor 很陌生。想问问有没有办法实现符合场景的调度器:

  1. 在时间 t,调度器会接收所有未处理的任务并处理它们。

  2. 在时间 t+1,有新任务到来,但调度程序无法接受它们,因为时间 t 的所有任务都没有处理完成。即使在时间 t 的某些任务已经处理完毕,调度器也无法从时间 t+1 开始接收新的任务,直到所有任务都处理完。如果是这种情况,调度程序将在时间 t+1 阻塞任务。直到所有任务 t+1 处理完毕,调度器才会在 t+1 接受新的任务。

【问题讨论】:

  • 第2点你说的不是很清楚。建议你自己再读一遍,看看为什么奇怪,然后自己改写。
  • 另外,您使用tt+1 之类的术语。在我看来,您将时间视为相对较大但离散的块(如时钟滴答声)。 t+1 中的 1 对您意味着什么?

标签: java scheduled-tasks


【解决方案1】:

您似乎想定义任务处理周期,其中没有任务会跨越周期边界。两个问题/提示:

【讨论】:

  • 我打算使用类似计时器的功能。我在想,如果我要在特定时间(例如凌晨 3 点)启动调度程序,那么对于每个间隔,它将开始运行任务,例如 1 分钟。我不确定以这种方式是否可行。我打算使用配置文件,以便我可以配置运行调度程序的时间和间隔。我没有考虑使用invokeAll。它有什么帮助?
  • @ktlim: invokeAll() 将启动所有提供的任务,然后等待它们完成。它通过阻塞提交者线程直到所有任务完成来允许一定程度的确定性......
  • @ktlim:但是,在我看来,您需要的比简单的作业调度程序更复杂。如果您描述您的实际问题,而不是您希望调度程序类做什么,这可能是最好的。比如下一个时间间隔到了,有些任务还没有完成怎么办?
  • 我发现如果我要描述这个问题,会很困难。我查看了 ScheduledThreadPoolExecutor api 文档,如果时间 t 的任务尚未处理,如果时间 t+1 有新任务进入,我似乎无法阻止调度程序运行。基本上就是想知道有没有什么代码或者方法可以达到阻塞调度器的目的,直到调度器完成从时间t开始的所有任务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多