什么是守护线程,和普通线程有什么区别?
典型回答 在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 。用户线程一般用于执行用户级任务,而守护线程也就是“后台线程”,一般用来执行后台任务,守护线程最典型的应用就是GC(垃圾回收器)。 这两种线程其实是没有什么区别的,唯一的区别就是Java虚拟机在所有<用户线程>都结束后就会退出,而不会等<守护线程>执行完。 扩展知识 创建守护线程 我们可以通过使用setDaemon()方法通过传递true作为参数,使线程成为一个守护线程。我们必须在启动线程之前调用一个线程的setDaemon()方法。否则,就会抛出一个java.lang.IllegalThreadStateException。 可以使用isDaemon()方法来检查线程是否是守护线程。 1 2 3 4 5 6 7 8 9 10 11 12 13 /** * @author Hollis */ public class Main { public static void main(String[] args) { Thread t1 = new Thread(); System.out.println(t1.isDaemon()); t1.setDaemon(true); System.out.println(t1.isDaemon()); t1.start(); t1.setDaemon(false); } } 以上代码输出结果: 1 2 3 4 5 false true Exception in thread "main" java.lang.IllegalThreadStateException at java.lang.Thread.setDaemon(Thread.java:1359) at com.hollis.Main.main(Main.java:16) 我们提到,当JVM中只剩下守护线程的时候,JVM就会退出,那么写一段代码测试下: ...