我有一個簡單的java程序。一個主線程(main()
)被創建並啓動另一個線程t
。java:爲什麼主線等待子線程完成
class T extends Thread{
@Override
public void run() {
while (true){
System.out.println("Inside thread");
}
}
}
public class Main {
public static void main(String[] args) {
Thread t = new T();
t.start();
//t.join();
System.out.println("end");
}
}
輸出:
end
Inside thread
Inside thread
Inside thread
....
....
它無限打印內螺紋。我不是在使用join()的主線程中等待子線程。打印後不應該退出主線程結束?
更新:
當Java虛擬機啓動時,通常有一個 非守護線程(它通常會調用命名爲主要的一些 指定類中的方法)。 Java虛擬機繼續直至出現以下任何一種情況發生時執行 主題:Runtime類的
- 退出方法被調用並且安全管理器允許退出操作發生。
- 所有不是守護進程線程的線程都已死亡,可以通過從調用返回運行方法或通過拋出傳播超出run方法的異常 。
我找到了原因。第二點澄清了它。我假定所有子線程在主線程退出(我錯了)之後會終止,並且JVM應該關閉。
是什麼讓你覺得主線程沒有退出? –
這是一個愚蠢的錯誤:(@DavidSchwartz –
我應該問爲什麼JVM而不是主線程 –