gpt4 book ai didi

java - 如何启动一个定期执行但在固定时间段内执行的计时器

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:53 24 4
gpt4 key购买 nike

我正在开发一个系统,该系统必须每 N 秒定期启动一个任务(下载文件)。这不是问题,我使用 TimerTimertask 做到了,如下所示:

FileTimer rXMLFileTimer;

private static Timer timer = new Timer("FileReader");
rXMLFileTimer = new ReadFileTimer();
int myDelay = 30;
timer.scheduleAtFixedRate(rXMLFileTimer, 0, myDelay * 1000);

并且 timertask 将一直运行,直到调用 rXMLFileTimer.cancel() 为止。到目前为止没有问题。

现在,要求此timertask应运行,直到rXMLFileTimer.cancel()被调用给定的时间。

我的第一个方法(没有成功)是实现一个Future,如下所示:

public class Test {

public static class MyJob implements Callable<ReadFileTimer> {

@Override
public ReadFileTimer call() throws Exception {
Timer timer = new Timer("test");

ReadFileTimer t = new ReadFileTimer();

int delay = 10;
// Delay in seconds
timer.schedule(t, 0, delay * 1000);

return t;
}
}

public static void main(String[] args) {

MyJob job = new MyJob();
System.out.println(new Date());

Future<ReadFileTimer> control = Executors.newSingleThreadExecutor().submit(job);

ReadFileTimer timerTask = null;
try {
int maxAmountOfTime = 30;
timerTask = control.get(maxAmountOfTime, TimeUnit.SECONDS);

} catch (TimeoutException ex) {
control.cancel(true);
} catch (InterruptedException ex) {

} catch (ExecutionException ex) {}

}
}

这不起作用,因为超时后我无法调用 timerTask.cancel() 。那么我的问题是:如何在给定的时间内启动 timerTask

谢谢!

最佳答案

为什么不直接添加第二个计时器任务来取消第一个任务呢?例如,以下代码每秒打印一次日期,持续十秒:

public static void main(String[] args) throws Exception {
Timer timer = new Timer();
final TimerTask runUntilCancelledTask = new TimerTask() {
@Override
public void run() {
System.out.println(new Date());
}
};
timer.schedule(runUntilCancelledTask, 0, 1000);
timer.schedule(new TimerTask() {
@Override
public void run() {
runUntilCancelledTask.cancel();
}
}, 10000); // Run once after delay to cancel the first task
}

关于java - 如何启动一个定期执行但在固定时间段内执行的计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26679714/

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