2014-06-20 49 views
3

我在eclipse和Netbeans IDE中得到了這個多線程代碼的不同輸出,我不知道它是怎麼回事,以及這背後的邏輯是什麼。我在Eclipse和Netbeans中獲得了不同的java多線程程序輸出?

而且每當我執行這段代碼時,它都會顯示不同的輸出,Plz Help Me。

公共類MyThread2在Eclipse繼承Thread
{

public void run() 

{

`System.out.println("r1");`   `` 
    try `` 
    {  
     Thread.sleep(500);  
    }  
    catch(Exception e)  
    {  

    }  
    System.out.println("r2"); 



}  
public static void main(String args[])  
{  
    MyThread2 t1=new MyThread2();  
    MyThread2 t2=new MyThread2();  
    t1.start();  
    t2.start();  
    System.out.println(t1.isAlive());  
    System.out.println(t2.isAlive());  

}  

}  

輸出:
R1
R1
真正
真正
R2
R2

與輸出的Netbeans:
R1
真正
真正
R1
R2
R2

+1

線程是不確定的,尤其是當您涉及到競爭條件時。在我看來,這並不奇怪,也不是一個問題。 – awksp

+0

甚至在Eclipse中運行該程序幾次。你也可能會看到不同的結果。 – Manish

+0

線程訪問方法或變量由JVM決定。同時使用同步來使單線程訪問方法。 – AJJ

回答

3

線程受JVM影響。 JVM選擇運行具有最高優先級的可運行線程。每當創建一個新的Java線程時,它與創建它的線程具有相同的優先級。所以,在你的情況下,這兩個線程具有相同的優先權!因此,JVM使用自己的算法(循環調度)來選取線程並按照該順序選擇並執行它們。它沒有固定的順序,對執行進行評級是完全不可預測的!

它會給你在同一IDE上不同樣品運行的不同輸出,即NetbeansEclipse。你可以試試兩種!它可能與之前的運行不同,因爲這些由JVM調度。

2

線程由JVM並沒有特定的順序安排。這就是你在涉及線程的相同代碼中看到不同輸出的原因。

JVM使用基於線程管理的內部操作系統來管理線程,並且在幾乎所有可用的操作系統中,線程調度算法都是循環法。

相關問題