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++;
}
};
我有一个 运行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++;
}
};