【 守护线程,用户线程,主线程】

线程相关知识

守护线程,用户线程,主线程

  1. 用户线程和主线程都是非守护线程,主线程指:main方法运行的线程。
  2. 在创建一个线程的过程中如果设置了Thread.setDaemon(false),表示将此线程设置为用户线程,Thread.setDaemon(true),表示将此线程设置为守护线程。
  3. 守护线程的特点是:当主线程终止时,守护线程自动终止。
  4. 用户线程在主线程运行结束后,依然会继续运行,此时JVM不会终止。
  5. JVM会在主线程运行结束,切无用户线程的情况下,自动终止。
  6. 守护线程在主线程运行结束后,如果没有其他用户线程运行的情况下,会随JVM的终止而结束。

测试:

/**
 * 主线程,用户线程,守护线程
 * 测试实例
 */
public class test {
    public static void main(String[] args) throws IOException, InterruptedException {
        System.out.println("主线程开始执行!");
        //用户线程
        Thread userThread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("用户线程------开始执行");
                try {
                    while(true) {
                        Thread.sleep(1000);
                        System.out.println("用户线程-----正在执行");
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("用户线程-----执行结束");
            }
        });
        //守护线程
        Thread daemonThread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("守护线程-----开始执行");
                try {
                    while(true) {
                        Thread.sleep(1000);
                        System.out.println("守护线程-----正在执行");
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("守护线程------执行结束");
            }
        });
        daemonThread.setDaemon(true);
        userThread.start();
        daemonThread.start();

        Thread.sleep(10000);

//        System.out.println("手动结束用户线程执行");
//        userThread.stop();
        System.out.println("手动结束守护线程执行");
        daemonThread.stop();
        System.out.println("主线程------执行结束!");

    }
}

上面的测试会发现:

  1. 当主线程执行结束后,用户线程和守护线程会继续执行
  2. 当主线程执行结束后,如果手动结束用户线程,守护线程也会结束执行
  3. 当主线程执行结束后,如果手动结束守护线程,用户线程会继续执行。
  4. 另外:在创建一个线程后,如果不设置 thread.setDaemon(true) 则这个线程是一个用户线程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值