Java 计划任务以可变时间间隔运行
我是Java新手,基本上,我必须启动一个线程并以默认时间间隔运行它,比如100秒(来自变量Java 计划任务以可变时间间隔运行,java,multithreading,Java,Multithreading,我是Java新手,基本上,我必须启动一个线程并以默认时间间隔运行它,比如100秒(来自变量冷却时间)。此冷却时间可以更新任意次数。假设冷却时间更改为10秒,现在线程应该以10秒的间隔运行。我应该使用什么以及如何实现这一点?我研究了一些选项,如ScheduledExecutorService,但它需要一个时间间隔,在我的例子中,这个时间间隔是不固定的。举个小例子会很有帮助。谢谢 将逻辑封装在类中,并使用一个设置间隔的方法。调用该方法时,将取消当前计划任务并启动新任务。它可以看起来像这样: priv
冷却时间)。此冷却时间可以更新任意次数。假设冷却时间更改为10秒,现在线程应该以10秒的间隔运行。我应该使用什么以及如何实现这一点?我研究了一些选项,如ScheduledExecutorService
,但它需要一个时间间隔,在我的例子中,这个时间间隔是不固定的。举个小例子会很有帮助。谢谢 将逻辑封装在类中,并使用一个设置间隔的方法。调用该方法时,将取消当前计划任务并启动新任务。它可以看起来像这样:
private ScheduledExecutorService executorService = ...
private ScheduledFuture<T> future = null;
public void setCoolDown(int cooldownSec) {
scheduleCoolDown(cooldownSec);
}
private synchronized void scheduleCoolDown(int interval) {
if (future != null || !future.isDone()) {
future.cancel();
}
future = executorService.scheduleAtFixedRate(theRunnable, interval, 0, TimeUnit.SECONDS);
}
private ScheduledExecutorService executorService=。。。
private ScheduledFuture future=null;
公共无效设置冷却时间(int冷却时间秒){
计划冷却时间(冷却时间秒);
}
专用同步无效计划冷却(int间隔){
if(future!=null | |!future.isDone()){
future.cancel();
}
future=executorService.scheduleAtFixedRate(TheRunName,interval,0,TimeUnit.SECONDS);
}
synchronized
用于确保同一时间只有一个线程可以重新调度 以下是如何使用TimerTask
完成此任务:
private volatile int cooldown = 100;
private Timer timer = new Timer();
private class MyTask extends TimerTask {
@Override
public void run() {
// do work
timer.schedule(new MyTask(), cooldown * 1000);
}
}
private void startSchedule() {
new MyTask().run();
}
public void setCooldown(int cooldown) {
this.cooldown = cooldown;
}
好吧,说真的,想解释一下否决票吗?正如我提到的,我是Java的新手,需要一些指导。这是否意味着只有专家才需要这样做?冷却更新需要立即生效,还是在下次运行后生效?