Java提供两种类型的线程:用户线程和守护程序线程。
用户线程是高优先级线程。JVM将在终止任务之前等待任何用户线程完成其任务。
守护线程是低优先级线程,其唯一作用是为用户线程提供服务。
由于守护线程旨在为用户线程提供服务,并且仅在用户线程运行时才需要,因此它们都不会退出JVM,直到所有用户线程执行完成。
这就是为什么通常存在于守护线程中的无限循环不会导致问题,因为任何代码(包括finally块)都不会在所有用户线程完成执行后执行。因此,不建议将守护线程用于I / O任务。
但是,这条规则有例外。守护线程中设计糟糕的代码可能会阻止JVM退出。例如,在正在运行的守护线程上调用Thread.join()可以阻止应用程序的关闭。
守护线程对于后台支持任务非常有用,例如垃圾收集,释放未使用对象的内存以及从缓存中删除不需要的条目。大多数JVM线程都是守护线程。
要将线程设置为守护线程,我们需要做的就是调用Thread.setDaemon() 方法 ,必须在start()方法之前
NewThread daemonThread = new NewThread();
daemonThread.setDaemon(true);
daemonThread.start();
要检查一个线程是否是一个守护程序线程,我们可以简单地调用方法isDaemon()