【发布时间】:2021-12-20 16:36:12
【问题描述】:
需要定时器方面的帮助:) 我需要在 vertx 中创建一个重复的计时器,延迟会发生变化。
参数延迟值 - 保存在我的数据库中。 假设我们从 10 秒开始。
当我每 10 秒运行一次处理程序时,我正在检查我的数据库。
如果值-延迟发生变化,我想更新延迟计时器
你知道如何编写一个改变延迟的计时器吗?
public void initTimer() {
long delayFromDB = getDelayFromDB();
setPeriodicTimer(delayFromDB);
}
public long setPeriodicTimer(long delayFromDB) {
long timerID = vertx.setPeriodic(delayFromDB, new Handler<Long>() {
@Override
public void handle(Long timerID) {
long currDelayFromDB = getDelayFromDB();
doSomeOperation();
newDelayFromDB = getDelayFromDB();
if(currDelayFromDB != newDelayFromDB ) {
restartTimerWithNewDelay(newDelayFromDB , timerID);
}
}
});
return timerID;
}
public void restartRefreshTimerWithNewTtl(long newDelayFromDB , Long timerID) {
//cancel last timer: timerID and restart timer with the new delay
vertx.cancelTimer(timerID);
setPeriodicTimer(newDelayFromDB );
}
是否可以取消计时器并立即从将要取消的计时器的句柄中创建另一个计时器。像这里?(在这个函数restartRefreshTimerWithNewTtl)
【问题讨论】: