我是Java的新手,基本上,我必须启动一个线程并以默认的时间间隔运行它,比如100秒(来自变量cooldown)。这个冷却时间可以更新任意次数。假设冷却时间更改为10秒,现在线程应该以10秒的间隔运行。我应该使用什么以及如何实现它?我研究了一些选项,如ScheduledExecutorService,但它需要一个时间间隔,在我的例子中没有固定的时间间隔。举个小例子会很有帮助。谢谢。
发布于 2016-02-11 15:46:17
将逻辑封装在一个类中,并有一个设置间隔的方法。当调用该方法时,您将取消当前的计划任务并启动一个新的任务。它可能看起来像这样:
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);
}synchronized的作用是确保同一时间只有一个线程可以重新调度。
发布于 2016-02-11 16:20:30
下面是如何使用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;
}https://stackoverflow.com/questions/35333104
复制相似问题