作用
守护线程会在非守护线程执行完毕时就结束,即使自己还没有执行完,就是守着别的线程,
别的线程不跑了它也不跑了,有点仆从的感觉。
设计用例验证
第一个用例:实验组
操作:
启动两个线程,一个是守护的一个不是
既然守护线程要守着别人,那就让别人跑的快,自己跑的慢,守护线程打印100个数,
别的线程什么都不干,观察守护线程能否打印全
预期:
非守护线程结束后,守护线程立马结束不会把100个数打印全。
实验代码:
package juc.test.sharememroy;
public class TestThreadDaemon {
public static void main(String[] args) {
Thread t1 = new Thread(){
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(i);
}
System.out.println("从线程结束");
}
};
t1.setDaemon(true);
t1.start();
System.out.println("主线程结束,是否为主线程=" + Thread.currentThread().isDaemon());
}
}
输出:
0
1
2
3
4
5
...
主线程结束,是否为主线程=false
...
49
50
51
Process finished with exit code 0
只打印到了51,t1就结束了,因为主线程结束了。
结论
符合预期,main线程结束后t1线程不会继续执行。
第二个用例:对照组
操作:
开启两个线程都不是守护线程,只把第一个代码中的:
t1.setDaemon(true);
修改成:
t1.setDaemon(false);
预期:
main线程执行结束后,t1会继续执行,直到100个数都打印出来。
执行后输出:
主线程结束,是否为主线程=false
0
1
2
...
98
99
从线程结束
结论
符合预期,main线程结束t1线程也会继续执行。