2010-10-21 71 views
1

我想有一個while循環啓動每個循環的線程,從while循環中啓動線程,會發生什麼情況?

我正在使用以下來啓動線程,我是否需要爲每個線程有一個唯一的標識符或因爲它是從不同的循環啓動它會啓動嗎?或者它會覆蓋之前的啓動,因爲它們使用相同的標識符?

while(x<y){ 
Runnable r = new Rule1("neil", 2, 0); 
new Thread(r).start(); 
x++; 
} 
+0

你認爲什麼地方會出錯? – SLaks 2010-10-21 15:12:04

+6

這樣的問題你應該先詢問後再嘗試。如果您感到困惑或者想要對結果進行解釋,那沒問題,但像「這項工作」這樣的問題通過運行和查看可以更好地完成。 – 2010-10-21 15:12:45

+0

此外,沒有任何邏輯或不合理的理由期望分享任何東西。他認爲將會分享什麼,甚至都沒有合理的解釋。 – SLaks 2010-10-21 15:13:59

回答

6

它會正常工作。

您的主題根本沒有任何標識符。
r變量是一個正常(和臨時)變量;您將其值傳遞給Thread構造函數。

運行時甚至不知道該變量。

+1

SLaks是正確的迴應每個線程沒有標識符的問題......他們將被視爲匿名(即沒有引用到您訪問的範圍內的線程。 ..)。這意味着每次通過循環時都無法獲得對前一個線程實例的引用。 – edwardsmatt 2010-10-21 15:25:53

4

它會啓動多個線程。線程唯一的「唯一標識符」是由Thread.getId()返回的ID,您無法分配該ID。即使線程名稱不需要是唯一的。換句話說,這裏沒有唯一的標識符被重用。

當然,在每次迭代中將Thread引用分配給同一個變量的事實並不意味着線程將毫不在意。

+1

線程ID在Java中是唯一的 – 2010-10-21 15:16:06

+0

@Aaron:是的,當然會更新以澄清。 – 2010-10-21 15:17:50

0

雖然您不需要爲每個線程創建唯一的標識符(框架將處理它),但最好的做法是儘可能將您的線程命名爲與他們正在做的事情相關的名稱,以便在開始調試時通過日誌/ jvisualvm你知道線程的目的。

相關問題