我有一个可运行的对象,每次运行都会对其进行更新(类变量)。我希望仅在上一次运行完成后才能在单线程(大概是SingleThreadExecutor?)中执行它。

我已经尝试过Executors.newSingleThreadScheduledExecutor(),但是它仅提供基于时间的重复任务。

我遇到的另一个问题是,如果我一次又一次地调度相同的可运行对象(循环),则它只能运行一次。

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

班级:

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++;
    }
};

关于java - Java中的重复任务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31015870/

10-12 04:07