当前位置: 首页 > 知识库问答 >
问题:

运行计划任务链

公西俊民
2023-03-14

>

  • 我需要在执行前一个任务后以不同的延迟一个接一个地运行计划的任务。示例。有一个任务列表和延迟列表。

    toRun = {task1, task2, ..., taskn}
    delays = {100, 9, 22, ..., 1000}
    

    现在我需要运行task1通过100ms,task2在task1之后通过9ms,task3在task2之后通过22ms等等。

    我正在使用javafx。任务可以使用一些UI更新方法,例如更改节点位置。这迫使我使用平台。runLater()方法,因为如果不这样做,则会出现异常“Not on FX application thread”。据我所知,这个方法在未定义的时间之后运行Runnable对象。根据时间的不同,我有两种方法。

    2.1继续使用平台。如果调用时间为,则返回runLater()方法

    2.2找到另一种解决方案,我还没有。

    关于实际任务。我记录用户操作,如鼠标移动、鼠标单击和一些应用程序事件。之后,我需要重播这些动作。因此,我使用ScheduledExecutorService检查每个操作。schedule(),并在每个操作任务的内部将下一个任务放入调度器。每次都会出现问题,或者感觉不够稳定。

    我认为这里的代码并没有那么有用,因为它很凌乱,而且有点大,需要快速找出

  • 共有1个答案

    包谭三
    2023-03-14

    假设实际任务本身(不包括延迟)运行时间不长(因此它们可能在FX应用程序线程上全部执行),您可以使用如下时间线:

    Runnable[] tasks = { /* task1, task2, ..., taskN */ } ; // N elements
    int[] delays = { 100, 9, 22, ..., 1000 }; // N-1 elements (delay after task1, ..., task(N-1)
    
    KeyFrame[] frames = new KeyFrame[tasks.length] ;
    int cumulativeMillis = 0 ;
    for (int i = 0; i < tasks.length; i++) {
        frames[i] = new KeyFrame(Duration.millis(cumulativeMillis), event -> tasks[i].run());
        if (i < delays.length) {
            cumulativeMillis += delays[i] ;
        }
    }
    Timeline timeline = new Timeline(frames);
    timeline.play();
    

    使用这种方法,无需担心多线程:时间线为您解决线程问题。每个任务都在FX应用程序线程上执行(但它们之间的暂停不会阻止该线程)。

     类似资料:
    • 我正在尝试用ECS Fargate设置一个计划的任务,但我不知道为什么它没有运行。我可以使用确认任务正常工作,但当我试图按计划触发它时,得到的只是一堆没有任何解释的'failedinvocations'。 虽然我知道规则正在被触发,所以这是一个好的迹象。见下方截图: 但每次触发它时,只有一个“FailedInvocation”。安排规则如下: 谢谢 编辑:区域现在支持此操作。请参阅备注。

    • 问题内容: 是否可以在确切指定的时间仅安排一次Spring服务方法?例如,当前时间是下午2点,但是当我按下操作按钮时,我希望我的服务方法从晚上8点开始。我熟悉@Scheduled批注,但不确定如何编写cron表达式以使其不定期运行。这一次,每天晚上8点触发。 有什么建议? 问题答案: 您可以使用Spring的TaskScheduler的实现之一。我在下面提供了一个示例,该示例不需要太多配置(包装了

    • 我有一套使用spring框架用Java写的服务。一些服务有预定的任务(使用spring的< code>@Scheduled注释)来做一些内务处理(生成处理过的数据,数据清理等。).由于这些计划任务,我不能运行服务的多个实例,因为所有实例都选择相同的任务,并且多次执行,导致重复/损坏的数据。为了解决这个问题,我想在任务执行时进行检查,并且只允许在一个实例上执行。我该怎么做?这个问题有更好的解决方法吗

    • 我在context.xml文件中定义了一个Spring调度任务,它每分钟运行一次。该任务调用postgres存储过程。存储过程运行时可以持续一分钟以上。如果当前运行没有完成,spring框架会调用相同的调度程序吗?谢谢,

    • 本文向大家介绍JavaScript计划任务后台运行的方法,包括了JavaScript计划任务后台运行的方法的使用技巧和注意事项,需要的朋友参考一下 即使忘了 JavaScript 的一切知识,也不会忘记:它是阻塞的。 想象一下,你的浏览器里住着一个魔法小精灵,负责浏览器的正常运转。不论渲染 HTML,响应菜单命令,屏幕渲染,处理鼠标点击,或者执行 JavaScript 函数,所有事情都归一个小精灵

    • 我的域控制器上有一个小脚本,它被设置为通过SMTP向我发送有关最新安全事件4740的电子邮件。 手动执行时,脚本将按预期运行;但是,当设置为通过计划任务运行时,尽管它显示已执行,但没有任何反应(没有电子邮件)。 脚本如下: 计划任务设置如下: 我还尝试了以下方法: 根据任务历史记录:任务开始、行动开始、创建任务流程、行动完成、任务完成。我浏览了网站上一些有着相同“问题”的不同链接,但它们似乎都有一