有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java计划以可变时间间隔运行任务

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


共 (2) 个答案

  1. # 1 楼答案

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

    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是为了确保只有一个线程可以同时重新调度

  2. # 2 楼答案

    下面是使用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;
    }