2013-05-27 81 views
0

我想知道如何在一個循環中啓動一個線程的第一時間啓動一個線程:在一個循環中

例子:

while(something) 
{ 

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

    thread.start(); 
} 

的問題是,我得到這個錯誤:

java.lang.IllegalThreadStateException: Thread already started. 

..because它的重新啓動線程每次在環...

如何啓動線程只有1次的循環?

+0

檢查線程的狀態爲什麼不啓動線程循環之前/之後? – Supericy

回答

4

設置一個布爾值來告訴您何時設置該值以便設置一次。我不知道爲什麼你不能將它設置在循環之外,但是如果我理解正確,這樣的事情應該可以工作。

boolean started = false; 

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

這個怎麼樣?

while(something) 
{ 

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

你提前1分鐘。 :) – JHS

+1

如果線程死了怎麼辦? – johnchen902

+0

它仍然給我的錯誤,因爲線程死了,它的重啓喜歡說@ johnchen902 – LeSam

2

的方式之一,可以使用isAlive()方法 -

while(something) 
{ 

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

}

3

您可以通過getState()

while(something){ 
    /* ... */ 

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

+1對於線程死亡時不會造成麻煩的解決方案。 – JustDanyul