【问题标题】:Is there a way to do a proper Thread.sleep in a @Scheduled(fixedDelay) block?有没有办法在 @Scheduled(fixedDelay) 块中执行正确的 Thread.sleep ?
【发布时间】:2020-09-24 22:41:28
【问题描述】:

我正在尝试在 @Scheduled(fixedDelay) 块中执行 Thread.sleep,但到目前为止还没有运气。根据我的阅读和看到,Thread.sleep 在@Scheduled 下不起作用。 我可以想到一个while循环,但我对这种方法没有那么自信。大家还有什么建议吗?

我正在这个调度程序下运行多个任务,我需要在其中一些任务之间设置一些延迟。将这些任务拆分为多个调度程序是毫无问题的。一切都必须在同一个下完成。

谢谢

【问题讨论】:

  • 在哪个线程应该休眠之后,任务是否有任何条件?也许在 N 个任务之后?
  • 对于何时必须调用这些睡眠没有明确的模式。在某些情况下,必须根据先前任务的输出调用它们。所以是随机的。
  • 但是什么时候线程应该唤醒?

标签: java spring


【解决方案1】:

您可以创建原子标志,以指示线程是否应该休眠。

private static final AtomicBoolean sleep = new AtomicBoolean(false);

@Scheduled(...)
public void schedule() {
    sleep.set(true);
}

public void process() {
    new Thread(() -> {
        while (true) {
            if (sleep.get()) {
                try {
                    Thread.sleep(1000L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                sleep.set(false);
            }
            
            doSmth();
        }
    }).start();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多