先来看看下面这个例子:
class Test extends Thread {
@Override public void run() {
setName("thread");
try {
sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
}
public static void main(String[] args) {
Thread thread = new Test();
thread.setDaemon(true); // 设置为守护线程
thread.run();
thread.start();
}
}
结果是只打印 main:
结果这是因为当所有常规线程运行完毕以后,守护线程不管运行到哪里,虚拟机都会退出运行。
通过 thread 实例调用 run 方法的行为是在 main 中进行的,这里为主线程,所以打印 main;之后调用 start 方法启动线程执行 run 时,main 已经执行完毕,而该线程为守护线程,虚拟机不必等待线程执行完就已经退出了,所以不会打印 thread。
网友评论