大家好,守護進程線程會在封閉線程結束時停止工作嗎?或者當「主」線程完成時守護線程會停止?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