在循环中启动一个线程

时间:2013-05-27 00:52:53

标签: java multithreading exception loops

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

示例:

while(something)
{

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

   thread.start();
}

问题是我收到了这个错误:

java.lang.IllegalThreadStateException: Thread already started.

..因为它每次都在循环中重启线程......

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

4 个答案:

答案 0 :(得分:4)

设置一个布尔值,告诉您何时设置该值以便设置一次。我不知道为什么你不能在循环之外设置它,但如果我理解正确的话,这样的东西应该有效。

boolean started = false;

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

答案 1 :(得分:3)

这个怎么样?

while(something)
{

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

答案 2 :(得分:3)

您可以按getState()

查看帖子的状态
while(something){
    /* ... */

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

答案 3 :(得分:2)

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

while(something)
{

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

}