我有一个可运行的对象,每次运行都会对其进行更新(类变量)。我希望仅在上一次运行完成后才能在单线程(大概是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/