2010-12-02 151 views
2

我在複雜的Java應用程序中面臨的問題歸結爲以下幾點:主線程不會繼續,直到子線程未完成,儘管我認爲它應該。其例示了問題的代碼如下所示:爲什麼主線程在繼續之前等待另一個線程完成?

public class ThreadTest { 

     static class MyThread extends Thread{ 
      public void run(){ 
       for(double i = 0; i<1; i+=0.01){ 
        System.out.println(Math.pow(Math.PI,Math.E)*100.0*i-234.0); 
       } 
      } 
     } 

     public static void main(String[] args){ 
      (new MyThread()).run(); 
      System.out.println("main thread"); 
     } 
    } 

當運行該程序,我總是從MyThread的輸出的第一(獨立地多少步都在循環),然後我從得到的消息主線程。創建線程的想法是異步執行代碼,但在這裏我觀察到一個明確的同步行爲。我錯過了什麼?

提前致謝!

+2

當你找到你喜歡的答案時,接受它是禮貌的。有時值得等待看看是否有更好的答案出現,但這取決於你。 – 2010-12-02 17:04:50

+0

當然,非常感謝!實際上我開始和運行時感到困惑。 – Tim 2010-12-03 09:35:56

回答

11

當你調用run()時,你正在調用當前線程中的run()方法!就像您爲另一個對象調用其他方法一樣。

如果你想要一個新的線程來調用run(),你需要調用線程上的start()。

試圖證實這一點

new MyThread().start(); 

一種方式是通過你的程序在調試器中的步驟,這將表明,只有一個線程。

相關問題