守护程序是在后台执行的线程。垃圾收集器是守护程序线程的一个示例,因为我们已经看到垃圾收集器在后台运行。
守护程序线程的目的是为用户线程提供支持。
例如,如果用户线程执行的内存不足(即用户线程需要更多的内存来执行),那么jvm将调用垃圾回收器(守护程序线程)以通过内存空间销毁无用的对象而获得空闲空间,并且用户线程可以快速执行。
通常,具有高优先级的线程将首先有机会执行,但守护进程线程将以最低优先级运行(但这并不意味着守护程序线程不能在需要时以最高优先级运行)。
与守护程序线程相关的方法很少
public boolean isDaemon()
public void setDaemon(boolean b)
在上述方法中描述为:
isDaemon()方法检查线程是否为守护程序。
如果需要,setDaemon(boolean b)方法将守护程序性质设置为非守护程序,或者将非守护程序设置为守护程序。通过在方法true或false中传递值。如果设置为true,它将使非守护程序成为守护程序,否则使守护程序成为非守护程序。
setDaemon(boolean b)在启动线程之前可以正常工作,否则我们将获得运行时异常。
主线程的性质是非守护程序,我们不能更改主线程的行为,而其他线程的性质是由父级继承的,或者可以由setDaemon(boolean b)设置。
示例
在此示例中,我们演示了setDaemon(boolean b)方法的行为
class DaemonThread extends Thread{ public void run(){ System.out.println("这个线程是守护进程线程" + Thread.currentThread().isDaemon()); } } class NDThread{ public static void main(String[] args){ DaemonThread dt = new DaemonThread(); System.out.println("Behaviour before setDaemon()" + dt.isDaemon()); dt.setDaemon(true); dt.start(); System.out.println("Behaviour after setDaemon()" + dt.isDaemon()); } }
输出结果
D:\Java Articles>java NDThread Behaviour before setDaemon()false Behaviour after setDaemon()true 这个线程是守护进程线程