zoukankan      html  css  js  c++  java
  • 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线程也会继续执行。

  • 相关阅读:
    qemu-kvm虚拟化——内存
    Virtualization and Performance: Understanding VM Exits
    Linux日志文件
    Linux那些让你虎躯一震的命令
    Linux命令——watch
    Linux kernel buffer ring
    Linux命令——dmesg
    Linux命令——systemctl
    Linux命令——taskset
    /sys 和 /dev 区别
  • 原文地址:https://www.cnblogs.com/oaks/p/13338009.html
Copyright © 2011-2022 走看看