即使在父线程死亡或终止之后子线程如何仍然执行?

这是我的两个class级:

public class Firstclass { public static void main(String args[]) throws InterruptedException { System.out.println("Main start...."); Secondclass t1 = new Secondclass(); t1.setName("First Thread"); Secondclass t2 = new Secondclass(); t2.setName("Second Thread"); t1.start(); t2.start(); System.out.println("Main close..."); } } 

 public class Secondclass extends Thread { @Override public void run() { try { loop(); } catch(Exception e) { System.out.println("exception is" + e); } } public void loop() throws InterruptedException { for(int i = 0; i <= 10; i++) { Thread t = Thread.currentThread(); String threadname = t.getName(); if(threadname.equals("First Thread")) { Thread.sleep(1000); } else { Thread.sleep(1500); } System.out.println("i==" + i); } } } 

现在,当我运行Firstclass ,输出是:

 Main start.... Main close... i==0 i==0 i==1 i==1 i==2 i==3 i==2 i==4 i==3 i==5 i==6 i==4 i==7 i==5 i==8 i==9 i==6 i==10 i==7 i==8 i==9 i==10 

我的问题是:让我们考虑主要方法是由JVM中的线程’T’执行,而t1和t2显然是父线程T的子线程,所以当作为主方法的T线程死亡时,T1和T2如何仍然执行并给我们输出。 因为如果父线程死亡或终止,那么子线程也应该死亡或终止。

线程之间没有父子关系的概念。 一旦两个线程运行,它们基本上是同行。 主线程可以在其他线程仍在运行时退出。

Java没有“子”线程的真正概念。 当你启动一个线程时,它从“父”inheritance守护进程和优先级,但这是父/子关系的结束。

Java不知道子线程的概念。 你的三个线程被平等对待。 您的想法接下来是创建守护程序线程,这些线程在最后一个java非守护程序线程停止时终止。

您发布的论文是关于一个名为ThreadMentor的学习系统。 但是这个系统的行为 Java 不同 ,这与Java无关。

这可能是Javas线程模型的一个良好开端:

http://docs.oracle.com/javase/tutorial/essential/concurrency/

在这个应用程序中,主线程首先启动并且正在运行,即使你已经启动了t1和t2它们进入就绪状态但是它们没有运行,当前运行的线程是主线程。 一旦主线程完成其所有语句,它就不会立即死亡,它会一直等到它完成子线程执行。 正如在上述情况中发生的那样。