我正在创建一个程序,该程序基于在包含解决方案 Vector
的总体中进行混合和扰动。
所以我创建了一个 for 循环
,它会在用户指定的特定时间后停止。
在循环内,我将调用 5 个过程,我认为如果我将每个过程都放在一个线程中,将使程序在同一时间生成比调用普通方法更多的解决方案。
这里 5 创建了 5 个线程,但是当我启动它们时,即使我使用 Thread.stop
、Thread.suspend
,它们也不想停止,Thread.interrupt
或 Thread.destroy
这是我的代码,你能帮我谈谈你的想法吗?
我插入了一个新变量:
public volatile boolean CrossOpb = true;`
这是我的代码:
Thread CrossOp = new Thread(new Runnable() {
public void run() {
while(CrossOpb == true){
int rdmCross2=(int) (Math.random() * allPopulation.size()) ; // Crossover 1st vector
int rdmCross1=(int) (Math.random() * allPopulation.size()) ;
Vector muted = new Vector();
Vector copy = copi((Vector) allPopulation.get(rdmCross2));
Vector callp = copi((Vector) allPopulation.get(rdmCross1));
muted = crossover(callp, copy);
System.out.println("cross over Between two Randoms ----------->");
affiche_resultat(muted);
allPopulation.add(muted);
}
}
});
循环:
CrossOp.setDaemon(true);
int loop = 1;
long StartTime = System.currentTimeMillis() / 1000;
for (int i = 0; i < loop; ++i) {
loop++;
if (timevalue < ((System.currentTimeMillis() / 1000) - StartTime)) {
loop = 0;
CrossOpb = false;
}
CrossOp.start();
}
最佳答案
我已经回复了 similar question .在那种情况下,它是 C#,但概念是相同的。
您不得终止线程。线程必须自行退出。
只需在某处放置一个 volatile boolean
变量,并将其设置为 true/false,当您希望线程终止时,然后在线程中替换 while (true)
使用 while (myVariable == true/false)
。
无论如何,你说:
Inside the loop, am going to call 5 procedures ant i thought that if i put each procedure in a thread will make the program making more solutions in a same time than calling normal methods.
嗯,这通常是错误的。如果过程是数据相关的(它们中的每一个都依赖于前一个过程的结果),那么将它们放在线程上将不会有任何改变。将迭代放在管道中可能更聪明,这样您就有 5 个线程执行连续迭代的步骤。我不确定这是否适用于遗传算法,而且无论如何您都必须处理一些特殊情况(例如,突变会改变部分计算迭代的总体)。
关于java - 如何在用户指定的时间内运行线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18818482/