gpt4 book ai didi

java - 重新初始化 ScheduledExecutorService 中的修复延迟

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:14:18 26 4
gpt4 key购买 nike

根据我的要求,我必须在一段时间后执行一些特定的代码。为此,我选择了 ScheduledExecutorService.scheduleWithFixedDelay(runnable, 0, 5, TimeUnit.SECONDS),它对我来说工作正常。但是根据我的另一个要求,fixedDelay中提到的时间应该是运行时可配置的。意思是,目前总延迟是 5 秒,但如果用户愿意,可以将延迟时间更改为 60 秒,并且在运行时 fixedDelay 将在 60 秒后运行。任何帮助将不胜感激。

请看代码:

static int i = 0;
static ScheduledExecutorService executor;
static Runnable runnable;
static ScheduledFuture<?> future;

public static void main(String args[]) {
executor = Executors
.newScheduledThreadPool(1);
runnable = new Runnable() {
@Override
public void run() {
System.out.println("Inside runnable" + i++);
changeDelay();
}
};
future =
executor.scheduleWithFixedDelay(runnable, 0, 5, TimeUnit.SECONDS);

}

public static void changeDelay() {
future.cancel(false);
future = executor.scheduleWithFixedDelay(runnable, 0, 10, TimeUnit.SECONDS);
}

这里我使用了 changeDelay 方法来改变延迟时间。但它不起作用。

最佳答案

您需要保留返回的 ScheduledFuture<?> 的引用对象:

ScheduledFuture<?> handle =
scheduler.scheduleWithFixedDelay(runnable, 0, 5, TimeUnit.SECONDS);

使用此引用,您可以取消当前任务并创建另一个具有新延迟的任务:

handle.cancel(false);    
handle = scheduler.scheduleWithFixedDelay(runnable, 0, 60, TimeUnit.SECONDS);

这是一个例子:

public class Test5 {
static int i = 0;
static ScheduledExecutorService executor;
static Runnable runnable;
static ScheduledFuture<?> future;

public static void main(String args[]) throws InterruptedException{
executor = Executors.newScheduledThreadPool(1);
runnable = new Runnable() {
@Override
public void run() {
System.out.println("Inside runnable" + i++);
}
};
future = executor.scheduleWithFixedDelay(runnable, 0, 5, TimeUnit.SECONDS);

Thread.sleep(20000l);

changeDelay();
}

public static void changeDelay() {
boolean res = future.cancel(false);

System.out.println("Previous task canceled: " + res);

future = executor.scheduleWithFixedDelay(runnable, 0, 20, TimeUnit.SECONDS);
}
}

关于java - 重新初始化 ScheduledExecutorService 中的修复延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16333244/

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