我有一个基于代理的模型,需要每 t
毫秒更新一次。在每个更新步骤中,所有代理对象都需要得到通知并执行一些代码。我希望每一步都持续 t
或直到最后一步完成,无论哪个时间更长。
我该怎么做?我正在尝试使用 Timer.schedule,但它似乎没有等待,因为我收到了 ConcurrentModificationException。
public void startClock(long delay) {
Timer timer = new Timer("clock", true);
TimerTask clockTask = new TimerTask() {
@Override
public void run() {
World.INSTANCE.update(); //this updates all agents
step++;
for (Timed task : listeners) {
task.run();
}
}
};
timer.schedule(clockTask, delay, interval); //miliseconds
}
public void startClock() {
startClock(interval);
}
最佳答案
看看ScheduledExecutorService#scheduleAtFixedRate()
。它将每隔 t
毫秒执行您的任务,或者如果花费的时间超过 t
,则在上次执行后立即执行您的任务。
关于java - 如何定期执行任务,但在某种程度上,直到最后一个步骤完成后才能开始步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55310126/