2014-10-31 96 views
1
class Runner extends Thread{ 
    public void run(){ 
     for(int i=0;i<5;i++) 
     { 
      System.out.println("Counting "+i); 
     } 
    } 
} 
public class App { 
    public static void main(String args[]) 
    { 
     Runner runner1=new Runner(); 
     runner1.start(); 
     Runner runner2=new Runner(); 
     runner2.start(); 
    } 
} 

我剛剛通過java中的線程基礎知識。預期的輸出是:Java線程:運行一個簡單的java線程程序輸出混淆

Counting 0 
Counting 0 
Counting 1 
Counting 1 
Counting 2 
Counting 2 
Counting 3 
Counting 3 
Counting 4 
Counting 4 

,但我越來越喜歡這個斜面的輸出似乎理了這一點:

Counting 0 
Counting 1 
Counting 2 
Counting 3 
Counting 4 
Counting 0 
Counting 1 
Counting 2 
Counting 3 
Counting 4 
+6

您的期望是錯的不是輸出:) – Shail016 2014-10-31 04:59:48

+1

計數顯示順序將改變請插入在運行這些代碼method.IT將工作。因爲兩個線程同時運行並非一個接一個。 – Visme 2014-10-31 05:02:07

+1

您可能需要計數到100或1000以查看輸出交錯。第一個線程完成,而你仍然開始從'主)第二個線程('。 – markspace 2014-10-31 05:18:40

回答

2

沒有任何一種同步的,不能有任何的期望,執行順序(和指令的交錯)用於多個線程。

在你的榜樣,你可以通過把長的停頓(的Thread.sleep)進入循環的每次迭代得到你期望的輸出(在技術上還不能保證,但實際而言不可避免的)。

0

請在代碼中提供線程睡眠。它將在兩個線程之間併發運行。

System.out.println("counting"+i) 
Thread.sleep(500) 

,只要你想