用户线程和守护线程

用户线程:平常创建的线程如果不做设置,默认都是用户线程,用来完成一些业务。
守护线程:守护线程需要在线程创建后做设置,设置为守护线程后那么该线程会随着用户线程的退出而退出;
举个例子,刘备、关羽、张飞三人桃园三结义,立下同年同月同日死的誓约,假如刘备就是用户线程,而关羽、张飞设置为了守护线程,一旦刘备某天突然挂了,那么关羽和张飞因为当初立下誓约,誓死跟随老大,看到刘备挂了也会同时赴死。

设置守护线程
setDaemon(true),默认为false,注意一定要在线程启动前设置是否为守护线程,否则会抛异常

下面看例子,三者都是用户线程的情况

public class Demo {

    public static void main(String[] args) throws InterruptedException {

        Thread t1 = new Thread(() -> {
            while (true){
                try {
                    Thread.sleep(1000);
                    System.out.println("关羽");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        t1.start();

        Thread t2 = new Thread(() -> {
            while (true){
                try {
                    Thread.sleep(1000);
                    System.out.println("张飞");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        t2.start();
        Thread.sleep(3000);
        
        System.out.println("主线程:刘备挂了");
    }
}

打印结果:从结果可看出,如果关羽和张飞都设置为用户线程,那么即便是主线程刘备执行完,他们由于死循环仍然会继续执行。

关羽
张飞
关羽
张飞
主线程:刘备挂了
张飞
关羽
关羽
张飞
......

将关羽、张飞设置为守护线程

public class Demo {

    public static void main(String[] args) throws InterruptedException {

        Thread t1 = new Thread(() -> {
            while (true){
                try {
                    Thread.sleep(1000);
                    System.out.println("关羽");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        t1.setDaemon(true);
        t1.start();

        Thread t2 = new Thread(() -> {
            while (true){
                try {
                    Thread.sleep(1000);
                    System.out.println("张飞");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        t2.setDaemon(true);
        t2.start();

        Thread.sleep(3000);
        System.out.println("主线程:刘备挂了");
    }
}

打印结果:一旦主线程刘备执行完,用户线程关羽和张飞也不会继续执行,哪怕有死循环。

张飞
关羽
关羽
张飞
主线程:刘备挂了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值