我对 Daemon 线程的了解是,如果没有用户线程在运行并且所有剩余线程都是 Daemon 类型,JVM 将退出。
当我运行下面的程序时,我总是看到输出为“主线程结束”作为第一行,打印“Hello from Worker 0”等等,直到还有几行”。
我的问题是,如果 Worker 线程被设置为守护进程,那么当主线程结束时,Worker 线程应该死掉并且不会继续,但仍然会打印“Hello from Worker 0”和子行,并且在一段时间后只有 JVM 结束,为什么它是这样的吗?
如果我的问题无效,我很抱歉,但我想知道答案并有疑问。
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
new WorkerThread().start() ;
System.out.println("Main Thread ending") ;
}
}
class WorkerThread extends Thread {
public WorkerThread() {
setDaemon(true) ;
}
public void run() {
int count=0 ;
while (true) {
System.out.println("Hello from Worker "+count++) ;
count++;
}
}
}
输出
Main Thread ending
Hello from Worker 0
Hello from Worker 2
Hello from Worker 4
Hello from Worker 6
Hello from Worker 8
谢谢