Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在循环中启动一个线程_Java_Multithreading_Exception_Loops - Fatal编程技术网

Java 在循环中启动一个线程

Java 在循环中启动一个线程,java,multithreading,exception,loops,Java,Multithreading,Exception,Loops,我想知道如何在循环中第一次启动线程: 例如: while(something) { /* ... Some codes ... */ thread.start(); } 问题是我遇到了以下错误: java.lang.IllegalThreadStateException: Thread already started. …因为每次在循环中都会重新启动线程 如何在循环中只启动一次线程?这个怎么样 while(something) { /* ... Some code

我想知道如何在循环中第一次启动线程:

例如:

while(something)
{

 /*
 ...
 Some codes
 ...
 */

   thread.start();
}
问题是我遇到了以下错误:

java.lang.IllegalThreadStateException: Thread already started.
…因为每次在循环中都会重新启动线程

如何在循环中只启动一次线程?

这个怎么样

while(something)
{

 /*
 ...
 Some codes
 ...
 */
   if (!thread.isAlive()) {
     thread.start();
   }
}

设置一个布尔值,告诉您何时设置该值,以便将其设置一次。我不知道为什么不能在循环之外设置它,但是如果我理解正确的话,类似的东西应该可以工作

boolean started = false;

while(something){
    if(!started){
        thread.start();
        started = true;
    }
}

其中一种方法是使用
isAlive()
方法-

while(something)
{

/*
...
Some codes
...
*/
 if(!thread.isAlive()) {
   thread.start();
 }

}

您可以通过
getState()


为什么不在循环之前/之后启动线程?+1是一个解决方案,如果线程死了也不会引起问题。它仍然会告诉我错误,因为线程死了,它会重新启动,就像@johnchen902所说的那样
while(something){
    /* ... */

    if (thread.getState() == Thread.State.NEW) {
        thread.start();
    }
}