![](/img/trans.png)
[英]Schedule a task not working for sending text message, in particular time interval repeatedly
[英]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.