java - 如何在用户指定的时间内运行线程?

标签 java multithreading concurrency executorservice

我正在创建一个程序,该程序基于在包含解决方案 Vector 的总体中进行混合和扰动。

所以我创建了一个 for 循环,它会在用户指定的特定时间后停止。 在循环内,我将调用 5 个过程,我认为如果我将每个过程都放在一个线程中,将使程序在同一时间生成比调用普通方法更多的解决方案。

这里 5 创建了 5 个线程,但是当我启动它们时,即使我使用 Thread.stopThread.suspend,它们也不想停止,Thread.interruptThread.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/

相关文章:

multithreading - Rails 4.2自动加载不是线程安全的

sql-server - 在 SQL Server 2005 和 2008 中,如何判断我使用的是悲观并发模型还是乐观并发模型?

ruby - 在并发 Ruby 中链接一组任务

java - 将 Javascript 对象转换为 Json 对象而不进行序列化

java - hibernate 和 spring mvc 中的 ClassCastException

java - AWS CDK 获取 DynamoDB Stream ARN 返回 null

python - mtTkinter 不会终止线程

c++ - CWnd::GetSafeHwnd() 和 CWnd::m_hWnd 是线程安全的吗?

Python 子进程在 Windows 上乱序运行

java - 在 Java 上创建嵌套循环