2016-03-31 188 views
1

在下面的代碼中,爲什麼主線程要等到子線程完成。爲什麼主線程會等待

Driver.java

public class Driver { 
public static void main(String[] args) throws InterruptedException { 
    Thread t = new Thread(new ThreadRunner()); 
    t.start(); 
} 
} 

ThreadRunner.java

public class ThreadRunner implements Runnable { 
@Override 
public void run() { 
    for (int i = 0; i < 10; i++) { 
     System.out.println("Child thread" + i); 
    } 
} 
} 

在這裏,在驅動程序類調用 't.start()' 後,不應在程序退出?我沒有使用連接,但主線程仍在等待直到新運行的「ThreadRunner」運行正在運行。是因爲在java中,主線程(由main方法啓動)始終等待,直到所有線程都關閉?

回答

5

主線程在啓動另一個線程後立即退出,但只要存在非守護線程,Java程序作爲一個整體繼續運行(除非您特別請求它,否則新線程將爲非守護進程)。

使線程成爲守護線程很簡單:在啓動線程之前,只需調用t.setDaemon(true);即可。

2

主線程並未實際等待。主線程完成。該程序不會退出,因爲您創建了非守護程序Thread。只有守護程序線程保留時,JVM將關閉。

-1

你可以添加'System.out.println(「主線程」);' ''t.start()'

然後你可以看到主線程是第一個。