守护线程和用户线程的区别

守护线程: 为程序提供后端服务的线程成为守护线程,非守护线程运行结束时守护线程也一并结束;

用户线程:用户线程和守护线程唯一的区别就是Daemon(Thread.getDaemon())为false;

下面简单演示一些守护线程跟非守护线程执行情况:

public static void main(String[] args) {
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {

            try {
                System.out.println("守护线程开始执行...");
                while(true){
                    System.out.println("守护线程休眠中..");
                    Thread.sleep(1000);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    });
    thread.setDaemon(true);
    thread.start();
    try {
        System.out.println(Thread.currentThread().getName() + "线程已休眠..");
        Thread.sleep(5000);
        System.out.println(Thread.currentThread().getName() + "线程休眠结束..");
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

守护线程和用户线程的区别

从打印信息上可以看出我们设置的守护线程为while(true)每隔一秒打印一次信息,main线程休眠5秒后结束,main线程结束时jvm直接停止了;