大家好,守护进程线程会在封闭线程结束时停止工作吗?或者当“主”线程完成时守护线程会停止?java守护进程线程
我在jre6上测试了这个例子,结果是daemon thread stopped working when the enclosing it thread finished
。请注意,java文档表示守护进程线程在没有其他应用程序线程保留时被终止。并不是说守护线程在父非守护线程保持不变时被杀死。
请给我答案。请寄给我关于这个问题的任何材料。 对不起,我的英文。
public class Main {
public static void main(String[] args) {
Thread simple = new Thread(new SimpleTask());
simple.start();
}
}
class SimpleTask implements Runnable {
public void run() {
try {
Thread daemon = new Thread(new DaemonTask());
daemon.setDaemon(true);
daemon.start();
Thread.sleep(5000);
} catch (InterruptedException e) {}
};
}
class DaemonTask implements Runnable {
public void run() {
int i = 0;
while (true) {
try {
System.out.println("a" + (i++));
Thread.sleep(500);
} catch (InterruptedException e) {}
}
}
}
现货!关键是“当没有任何非守护进程线程时,JVM将终止” – Manish 2011-12-30 09:24:28
Jon Skeet说的是正确的。在您的示例中,当您的SimpleTask终止时,守护线程将停止。原因是您的主线程在SimpleTask终止之前停止。所以,当SimpleTask被终止,这是最后一个非恶魔线程,因此你的守护线程也停止 – 2011-12-30 09:26:57