Java 实现一个调度程序,在接收新任务之前,该调度程序将一直阻止,直到所有任务完成

Java 实现一个调度程序,在接收新任务之前,该调度程序将一直阻止,直到所有任务完成,java,scheduled-tasks,Java,Scheduled Tasks,我对使用JavaSchedulerReadPoolExecutor相当陌生。我想问一下,是否有一种方法可以实现与场景匹配的调度器: 在时间t,调度程序将接收所有未处理的任务并对其进行处理 在时间t+1,有新任务即将到来,但调度程序无法执行这些任务,因为时间t的所有任务尚未处理完毕。即使在时间t完成了部分任务的处理,调度程序也无法从时间t+1接收新任务,直到所有任务都完成处理。如果是这种情况,调度程序将在时间t+1阻塞任务。直到所有任务t+1都完全处理完毕,调度程序将在t+1接收新任务 似乎您想要

我对使用Java
SchedulerReadPoolExecutor
相当陌生。我想问一下,是否有一种方法可以实现与场景匹配的调度器:

  • 在时间t,调度程序将接收所有未处理的任务并对其进行处理

  • 在时间t+1,有新任务即将到来,但调度程序无法执行这些任务,因为时间t的所有任务尚未处理完毕。即使在时间t完成了部分任务的处理,调度程序也无法从时间t+1接收新任务,直到所有任务都完成处理。如果是这种情况,调度程序将在时间t+1阻塞任务。直到所有任务t+1都完全处理完毕,调度程序将在t+1接收新任务


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

    • 为什么你需要使用?除非您打算使用它类似计时器的功能,这可能会与您的任务周期要求冲突,否则简单的配置就足够了

    • 您是否考虑过重新构造代码以供使用


    您在第2点中所说的并不完全清楚。我建议你自己再读一遍,看看它为什么奇怪,然后重新措辞。此外,你还可以使用
    t
    t+1
    等术语。在我看来,你似乎把时间看作是相对较大但离散的时间块(如时钟滴答声)。
    t+1
    中的
    1
    对您意味着什么?我打算使用类似计时器的功能。我的想法是,如果我想在一个特定的时间(比如凌晨3点)启动调度程序,那么对于每个间隔,它将开始运行任务(比如说1分钟)。我不确定这样做是否可行。我打算使用配置文件,以便配置运行调度程序的时间和间隔。我没有考虑使用CuffKALL。它有什么帮助?@ktlim:
    invokeAll()
    将启动所有提供的任务,然后等待它们完成。它通过阻止提交者线程直到所有任务完成,从而允许一定程度的确定性…@ktlim:然而,在我看来,您需要的比简单的作业调度程序更复杂。最好是描述实际问题,而不是您希望调度器类做什么。例如,如果下一个时间间隔到了,而一些任务还没有完成,会发生什么?我发现如果我想描述这个问题,那就很难了。我查看ScheduledThreadPoolExecutor api文档,如果在时间t+1有新任务进入,如果在时间t的任务尚未处理,我似乎无法阻止调度器运行。基本上,我只是想知道是否有一种代码或方法可以达到阻止调度器的目的,直到调度器从时间t开始完成所有任务。