java 中的周期性任务

Recurring task in java

我有一个 运行nable 对象,每 运行(class 个变量)更新一次。我希望能够在单个线程中执行它(大概是 SingleThreadExecutor?)BUT 只有在前一个 运行 完成之后。

我试过Executors.newSingleThreadScheduledExecutor(),但它只提供基于时间的重复任务。

我遇到的另一个问题是,如果我一遍又一遍地(在一个循环中)安排相同的 运行nable,它 运行 只会出现一次。

我怎样才能达到我想要的?

class:

public class Population implements Runnable{
 private int count=0;
 ...

@Override
public void run(){
    evaluateAll();

    List<Individual> parents = elitism();

    individuals.clear();

    for (int i = 0; i < popSize; i++) {
        Individual child = Individual.uniformCrossover(parents);
        if(Utilities.RANDOM.nextDouble() < mrate)
            child.mutate();
        individuals.add(child);
    }

    System.out.println(this);
 }
}

发射部分:

Population population = new Population();
    ScheduledExecutorService ses = Executors
            .newSingleThreadScheduledExecutor();
    for (int i = 0; i < 300; i++)
        ses.schedule(population, 0, TimeUnit.MILLISECONDS);
    ses.shutdown();

您可以简单地运行您的代码在专用线程中循环

public static void main(String[] args) throws Exception {
    ExecutorService executorService = Executors.newSingleThreadExecutor();
    executorService.submit(() -> {
        for (;;)
            statefulRunnable.run();
    });
}

public static final Runnable statefulRunnable = new Runnable() {
    private int state;

    @Override
    public void run() {
        state++;
    }
};