簡體   English   中英

安排任務以可變的時間間隔運行

[英]Schedule a task to run at variable time interval

我是Java的新手,基本上,我必須啟動一個線程並以默認的時間間隔(例如100秒)運行它(來自變量cooldown )。 此冷卻時間可以更新任意次數。 假設冷卻時間變為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);
}

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM