这是我的两个班级:
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如何仍然执行并给我们输出.因为如果父线程死亡或终止,那么子线程也应该死亡或终止.