Java 我如何定期执行一项任务,但以一个步骤可以';在最后一个完成之前不要开始

Java 我如何定期执行一项任务,但以一个步骤可以';在最后一个完成之前不要开始,java,concurrency,Java,Concurrency,我有一个基于代理的模型,需要每t毫秒更新一次。在每个更新步骤中,都需要通知所有代理对象并执行一些代码。我希望每一步都能持续t,或者直到最后一步完成为止,不管是哪一步更长 我该怎么做?我正在尝试使用Timer.schedule,但它似乎没有等待,因为我得到了一个ConcurrentModificationException public void startClock(long delay) { Timer timer = new Timer("clock", true); Ti

我有一个基于代理的模型,需要每
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);
}
看一看。它将每隔
t
毫秒执行一次任务,如果执行时间超过
t

请查看。它将每隔
t
毫秒执行一次任务,如果执行时间超过
t

您也可以进行评估,则会在上次执行后立即执行任务。它确保runnable的执行不会重叠。下面是他们文档中的片段-

如果runnable的执行时间长于间隔,则后续执行将在前一个执行完成后立即开始(runnable的执行不会重叠)。在这种情况下,实际执行间隔将与传递的间隔不同

您还可以评估。它确保runnable的执行不会重叠。下面是他们文档中的片段-

如果runnable的执行时间长于间隔,则后续执行将在前一个执行完成后立即开始(runnable的执行不会重叠)。在这种情况下,实际执行间隔将与传递的间隔不同


在run()中执行代码之前,不能只检查一个布尔成员变量吗?在run()中执行代码之前,不能只检查一个布尔成员变量吗?