gpt4 book ai didi

Java - 暂停 Akka 调度程序

转载 作者:行者123 更新时间:2023-12-02 02:44:16 27 4
gpt4 key购买 nike

所以我有这个调度程序,它现在除了增加一个数字之外没有做任何事情。当它达到 5 时,我想暂停它,然后重置尝试次数。我到达了 totalTries 达到 5 的点,然后它停止了 30 秒。但 30 秒过去后,它会立即记录下 5 个 totalTries 并再次暂停。显然,幕后正在发生更多事情。

我是否误解了它的使用方式?我想要做的是完全暂停 ActorSystem system 一段时间。非常感谢任何提示。

system.scheduler().schedule(
Duration.create(5, TimeUnit.SECONDS),
Duration.create(1, TimeUnit.SECONDS),
new Runnable() {

public void run() {

int totalTries = incrementTries(1);
logger.info("tries: " + totalTries);

if(totalTries >= 5) {
logger.info("5 tries reached, waiting 30 seconds.");
try {
Thread.sleep(30000);
} catch (InterruptedException e) {
logger.info("Sleep interrupted" + e);
}
resetTries();
}
}
}
}, system.dispatcher());

最佳答案

据我所知,您无法暂停 ActorSystem。您的代码通过调用 Thread.sleep(30000) 执行的操作会阻塞调度程序线程,当它醒来时,它会尝试通过发出挂起的通知来 catch 其计划 - 这是正确的行为。

不建议使用 Thread.sleep 来阻塞 Actor 系统中的线程。

我要做的是:

当你的计数器达到 5 时:

  • 取消日程
  • 使用处理程序在 30 秒内安排一个新的一次性通知,该处理程序将重新安排原始通知

或者,您可以继续原来的时间表,一旦计数器达到 5:

  • 设置一个标志以忽略进一步的通知
  • 使用处理程序在 30 秒内安排一个新的一次性通知,该处理程序将取消在上述步骤中设置的标志

关于Java - 暂停 Akka 调度程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44904779/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com