首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将任务安排为以可变时间间隔运行

将任务安排为以可变时间间隔运行
EN

Stack Overflow用户
提问于 2016-02-11 15:22:47
回答 2查看 1.1K关注 0票数 3

我是Java的新手,基本上,我必须启动一个线程并以默认的时间间隔运行它,比如100秒(来自变量cooldown)。这个冷却时间可以更新任意次数。假设冷却时间更改为10秒,现在线程应该以10秒的间隔运行。我应该使用什么以及如何实现它?我研究了一些选项,如ScheduledExecutorService,但它需要一个时间间隔,在我的例子中没有固定的时间间隔。举个小例子会很有帮助。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-02-11 15:46:17

将逻辑封装在一个类中,并有一个设置间隔的方法。当调用该方法时,您将取消当前的计划任务并启动一个新的任务。它可能看起来像这样:

代码语言:javascript
复制
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的作用是确保同一时间只有一个线程可以重新调度。

票数 1
EN

Stack Overflow用户

发布于 2016-02-11 16:20:30

下面是如何使用TimerTask实现这一点

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35333104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档