2014-01-29 80 views
1
public static void main(String[] args) throws Exception { 
    new Thread(new Runnable() { 
     public void run() { 
      while(true) { 
       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       System.out.println("Hello"); 
      } 
     } 
    }).run(); 
    System.out.println("Bye"); 
} 

在主要的thead中,我創建了一個新的線程,它會每秒打印一個「hello」。爲什麼最後的「再見」從未得到過印刷品?換句話說,爲什麼子線程阻塞主線程?java中的子線程塊父線程

+0

[Java中運行多線程的問題]的可能重複(http://stackoverflow.com/questions/4235487/problem-running-multiple-threads-in-java) – Gray

回答

6

因爲您致電run()而不是start()

您不能直接撥打run()。如果您致電start(),該程序將在另一個線程中爲您撥打run()。 (就像你想要的那樣。)通過自己調用run(),你將使用父線程進入run()方法,並與父線程陷入永恆循環。