【发布时间】:2014-04-05 12:20:10
【问题描述】:
这是我的两个课程:
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
我的问题是:让我们考虑 main 方法由 JVM 中的线程“T”执行,t1 和 t2 显然是父线程 T 的子线程,所以当作为 main 方法的 T 线程死亡时T1 和 T2 怎么还能执行并给我们输出。因为如果父线程死亡或终止,那么子线程也应该死亡或终止。
【问题讨论】:
-
如果您将这些线程作为守护线程运行,当主线程完成时,您的应用程序将退出。看看“守护进程”线程。当唯一运行的线程是守护线程时,JVM 将退出。
The Java Virtual Machine exits when the only threads running are all daemon threads. -
多线程的全部意义在于获得同时动作。主线程和其他线程将在执行中轮换。如果您在线程上调用了 .join() 方法,这将确保其他线程在主线程继续之前完成执行。
-
@SOlace 和 @anonymous 我知道守护线程和用户线程之间的区别,但现在让我们避免即使父线程死亡,子线程如何执行?
-
请从您的机器上删除该 mtu 链接的所有痕迹并刻录所有硬拷贝。这太糟糕了,以至于超出了它的叙述范围。
-
@Martin 所以你是说即使作为主线程的父线程退出子线程仍然执行。如果这是你的意思,那么请提供你的答案来源。如果你可以提供来自的链接oracle.docs 太棒了。
标签: java multithreading jvm