JUC--用户线程和守护线程

java线程分为用户线程和守护线程

一般不做特别说明配置,默认都是用户线程

用户线程:是系统的工作线程,它会完成这个程序需要完成的业务操作。

守护线程:是一种特殊的线程,为其他线程服务的,在后台完成一些系统性的服务,如:垃圾回收线程。

守护线程作为一个服务线程,没有服务对象就没有必要继续运行了,如果用户线程全部结束了,意味着程序需要完成的业务操作已经结束了,系统可以退出了。所以假如当系统只剩下守护线程的时候,java虚拟机会自动退出。

判断线程是用户线程还是守护线程有一个属性,叫isDaemon

true表示是守护线程

false表示是用户线程

public class Test2 {
    public static void main(String[] args) {
        new Thread(() -> {
            System.out.println(Thread.currentThread().getName()+"  "+Thread.currentThread().isDaemon());
        },"t1").start();
    }
}

 结果为false,表示不是守护线程,也就是用户线程

import java.util.concurrent.TimeUnit;

public class Test2 {
    public static void main(String[] args) {
        new Thread(() -> {
            System.out.println(Thread.currentThread().getName()+"  "+Thread.currentThread().isDaemon());
            while (true){

            }
        },"t1").start();

        //暂停几秒钟线程
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(Thread.currentThread().getName()+"   end");
    }


}

扫描二维码关注公众号,回复: 15613632 查看本文章

 可以看到,线程t1是没结束的,但是主线程已经执行完了,但是此时程序并没有退出,说明用户线程之间互不影响。

但是当我们把t1设置成守护线程时

 

 主线程结束,程序就退出了。

猜你喜欢

转载自blog.csdn.net/a2285786446/article/details/131536715
今日推荐