2012-08-08 58 views
0

我正在學習Java中的MULTITHREADING,我想知道爲什麼在下面的代碼中,當執行start方法以調用run方法時,子線程不會立即運行子線程?java多線程 - 子線程不會立即啓動

取而代之,執行start方法後,主線程繼續執行其代碼並開始打印「。」。它執行三次並且控制由子線程接管。子線程然後執行一次它的代碼並返回到主線程。然後主線程完成,然後子線程完成其執行。

我無法理解爲什麼會發生這種情況?

class MyThread implements Runnable { 

    String thrdName; 

    MyThread(String name) { 
     thrdName = name; 
    } 

    public void run() { 
     System.out.println(thrdName + " starting."); 
     for (int count = 0; count < 10; count++) { 
      System.out.println("In " + thrdName + ", count is " + count); 
     } 
    } 
} 

class UseThreads { 

    public static void main(String args[]) { 
     System.out.println("Main thread starting."); 
     MyThread mt = new MyThread("Child #1"); 
     Thread newThrd = new Thread(mt); 
     newThrd.start(); 
     for (int i = 0; i < 50; i++) { 
      System.out.print("."); 
     } 
    } 
} 
+0

你是否理解併發與並行的區別? – oldrinb 2012-08-08 23:34:30

+2

@veer ...尚未 – user547453 2012-08-08 23:39:56

+0

@ user547453 +1:D – MadProgrammer 2012-08-08 23:45:06

回答

2

開始線程的調用是異步的。它不會等到線程在返回之前開始運行;它基本上立即返回。

你可以通過一些鎖定來自己實現這個行爲,這樣你的主線程就會暫停,直到你開始的線程發出某種信號,表明它已經開始執行。

4

當你調用start()在你的線程,你得到它的服務將如何快速啓動沒有任何保證。這取決於計算機的線程調度程序。如果您多次運行您的代碼,您可能會爲您的線程獲得幾個不同的執行順序。