我有一个函数foo()
。
我想每隔5秒拨打foo()
,然后在" X" foo()
的呼叫每4秒呼叫一次。在另一个" X"每隔3秒调用foo()
,直到foo每秒调用一次。
我还需要能够随时停止呼叫foo。
我查看了其他Stack Overflow帖子,但没有找到任何允许我动态更改调用间隔的内容。
我该怎么办?
答案 0 :(得分:1)
查看Java中的Timer
和TimerTask
类。您可以安排TimerTask并让任务决定下次安排它的时间。任务安排自己。
这样您就可以动态决定下一个执行间隔。
import java.util.Timer;
import java.util.TimerTask;
public class Main {
public interface FooService {
public void foo();
}
public static class DelayCalculator {
public long nextTime() { // ... };
}
public static class FooTask extends TimerTask {
FooService fooSvc;
public FooTask(FooService foos) {
fooSvc = foos;
}
@Override
public void run() {
fooSvc.foo();
TIMER.schedule(new FooTask(fooSvc), DELAYCALC.nextTime());
}
}
private static final Timer TIMER = new Timer();
private static final DelayCalculator DELAYCALC = new DelayCalculator();
public static void main(String[] args) {
FooTask fooT = new FooTask(() -> System.out.println("Foo"));
TIMER.schedule(fooT, 0);
}
}
答案 1 :(得分:0)
每5秒设置一个计时器(通过处理程序报警)。跟踪它被调用的次数。当该数字高于X时,将计时器更改为每4秒。当它高于2 * X时,将其改为3.等等。