Java的守护线程

作用

守护线程会在非守护线程执行完毕时就结束,即使自己还没有执行完,就是守着别的线程,
别的线程不跑了它也不跑了,有点仆从的感觉。

设计用例验证

第一个用例:实验组

操作:

  1. 启动两个线程,一个是守护的一个不是
  2. 既然守护线程要守着别人,那就让别人跑的快,自己跑的慢,守护线程打印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线程也会继续执行。

posted @ 2020-07-18 22:59  oaksharks  阅读(211)  评论(0编辑  收藏  举报