如何在Java中创建守护程序线程?

Java中的守护程序线程

守护程序是在后台执行的线程。垃圾收集器是守护程序线程的一个示例,因为我们已经看到垃圾收集器在后台运行。

守护程序线程的目的是为用户线程提供支持。

例如,如果用户线程执行的内存不足(即用户线程需要更多的内存来执行),那么jvm将调用垃圾回收器(守护程序线程)以通过内存空间销毁无用的对象而获得空闲空间,并且用户线程可以快速执行。

通常,具有高优先级的线程将首先有机会执行,但守护进程线程将以最低优先级运行(但这并不意味着守护程序线程不能在需要时以最高优先级运行)。

与守护程序线程相关的方法很少

  1. public boolean isDaemon()

  2. 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
这个线程是守护进程线程