2010-03-14 90 views
0

我不知道Java中的線程。我想知道是什麼在此代碼發生,因爲每次運行時,它會產生一個不同的輸出:爲什麼下面的Java代碼每次都有不同的輸出?

public class TwoThreadsDemo{ 
    public static void main(String[] args) 
    { 
     new SimpleThread("Java Programmer").start(); 
     new SimpleThread("Java Programmer").start(); 
    } 
} 

class SimpleThread extends Thread{ 
    public SimpleThread(String str) 
    { 
     super(str); 
    } 

    public void run() 
    { 
     for (int i=0;i<10;i++) 
     { 

      System.out.println(i + " " + getName()); 

      try 
      { 
       sleep((long)(Math.random()*1000)); 
      } 
      catch(InterruptedException e) 
      { 

      } 

     } 
     System.out.println("Done!" + getName()); 
    } 

} 

回答

2

你睡覺的秒隨機數。

sleep((long)(Math.random()*1000)); // Because of this. 

編輯:爲了解釋更多,每次運行它睡覺的秒隨機數。所以第一個線程可以在第二個線程之前喚醒五次。在另一次運行中,第二個線程可以在第一個線程之前喚醒兩次,依此類推。

+1

我明白了。所以在此期間,第二個線程開始運行,然後再次執行睡眠。第一個線程從之前的地方繼續。那是怎麼回事?請解釋 – 2010-03-14 08:46:53

相關問題