Java 是否可以将带有Spring@Scheduled注释的作业安排为每小时运行,但每次都是随机运行的?

Java 是否可以将带有Spring@Scheduled注释的作业安排为每小时运行,但每次都是随机运行的?,java,spring,random,schedule,Java,Spring,Random,Schedule,我想每小时运行我的任务/方法。。但每一次都是随机的。 我已经试过了,但这个解决方案是设置随机初始值,但在同一分钟后使用 我希望实现这样一种情况,即工作是这样运行的。例: 8:10 9:41 10:12 …是的,所以…这不是一个时间表。这是一个不确定的事件 预定的事件是可重复的,并且可以在特定时间持续触发的事件。有一个顺序和可预测性与此同时存在 如果作业在给定的时间触发,但不一定在给定的分钟触发,则会失去可预测性,@Scheduled注释将强制执行的可预测性(不一定通过实现,但作为副作用;注释可

我想每小时运行我的任务/方法。。但每一次都是随机的。 我已经试过了,但这个解决方案是设置随机初始值,但在同一分钟后使用

我希望实现这样一种情况,即工作是这样运行的。例:

8:10 9:41 10:12

是的,所以…这不是一个时间表。这是一个不确定的事件

预定的事件是可重复的,并且可以在特定时间持续触发的事件。有一个顺序和可预测性与此同时存在

如果作业在给定的时间触发,但不一定在给定的分钟触发,则会失去可预测性,
@Scheduled
注释将强制执行的可预测性(不一定通过实现,但作为副作用;注释可能只包含编译时常量,并且不能在运行时动态更改)

作为一种解决方案,
Thread.sleep
是脆弱的,它会导致整个应用程序在不想做的时间段内休眠。取而代之的是,并计划好

警告:下面是未测试的代码

@Scheduled(cron = "0 0 * * * ?")
public void executeStrangely() {
    // Based on the schedule above,
    // all schedule finalization should happen at minute 0.
    // If the pool tries to execute at minute 0, there *might* be
    // a race condition with the actual thread running this block.
    // We do *not* include minute 0 for this reason.
    Random random = new Random();
    final int actualMinuteOfExecution = 1 + random.nextInt(59);
    final ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);

    exec.schedule(() -> {
        // Critical code here
    }, actualMinuteOfExecution, TimeUnit.MINUTES);
}

我将以线程安全的方式管理资源的工作留给读者作为练习。

对,因此,这不是一个时间表。这是一个不确定的事件

预定的事件是可重复的,并且可以在特定时间持续触发的事件。有一个顺序和可预测性与此同时存在

如果作业在给定的时间触发,但不一定在给定的分钟触发,则会失去可预测性,
@Scheduled
注释将强制执行的可预测性(不一定通过实现,但作为副作用;注释可能只包含编译时常量,并且不能在运行时动态更改)

作为一种解决方案,
Thread.sleep
是脆弱的,它会导致整个应用程序在不想做的时间段内休眠。取而代之的是,并计划好

警告:下面是未测试的代码

@Scheduled(cron = "0 0 * * * ?")
public void executeStrangely() {
    // Based on the schedule above,
    // all schedule finalization should happen at minute 0.
    // If the pool tries to execute at minute 0, there *might* be
    // a race condition with the actual thread running this block.
    // We do *not* include minute 0 for this reason.
    Random random = new Random();
    final int actualMinuteOfExecution = 1 + random.nextInt(59);
    final ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);

    exec.schedule(() -> {
        // Critical code here
    }, actualMinuteOfExecution, TimeUnit.MINUTES);
}

我将以线程安全的方式管理资源的工作留给读者作为练习。

每天至少运行作业多少次,延迟时间应该是多少?每天至少运行作业多少次,延迟时间应该是多少?非常感谢!很好的解释。非常感谢!很好的解释。