gpt4 book ai didi

java - 抑制 ScheduledThreadPoolExecutor 中的冗余作业

转载 作者:行者123 更新时间:2023-12-04 05:36:25 27 4
gpt4 key购买 nike

我正在使用 ScheduledThreadPoolExecutor 执行定期任务。
执行必须是周期性的,而不是固定的延迟。

我遇到了以下问题:考虑一个任务的时间为 1 分钟。如果任务需要 5 分钟才能执行(例如,由于临时网络问题),则错过的执行将在任务完成后立即排队并分派(dispatch)。有没有办法摆脱错过的累积处决?

我尝试使用 remove 方法,但它完全删除了任务,而不仅仅是特定的执行。

谢谢

最佳答案

可能有更好的方法,但您可以让您的任务自行重新安排。这样,一次执行将始终在前一次执行完成后 1 分钟运行:

final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
Runnable yourTask = new Runnable() {

@Override
public void run() {
//do your stuff
scheduler.schedule(this, 1, TimeUnit.MINUTES);
}
};
scheduler.schedule(yourTask, 1, TimeUnit.MINUTES);

编辑

如果您希望您的任务完全在 hh:mm:00(精确分钟)运行,您可以将代码替换为
long millisToNextMinute = 60000 - System.currentTimeMillis() % 60000;
scheduler.schedule(this, millisToNextMinute, TimeUnit.MILLISECONDS);

关于java - 抑制 ScheduledThreadPoolExecutor 中的冗余作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11864838/

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