Java中的守护程序线程示例
时间:2020-02-23 14:36:12 来源:igfitidea点击:
守护程序线程是低优先级背景线程,它为用户线程提供服务。
它的生命取决于用户线程。
如果没有用户线程正在运行,则即使守护程序线程正在运行,JVM也可以退出。
JVM不要等待守护程序线程完成。
守护程序线程执行后台任务,如垃圾收集,终结器等。
守护程序线程的唯一目的是为用户线程服务,因此如果没有用户线程,则没有JVM运行这些线程,这就是为什么JVM退出后没有用户线程。
两个与守护程序线程相关的方法
public void setdaemon(布尔状态):此方法可用于将线程标记为用户或者守护程序线程。
如果我们将SetDaemon(true)放置,则将线程作为守护程序。
Public boolean isDaemon()此方法可用于检查线程是否是守护程序。
守护程序线程示例:
package org.arpit.theitroad;
class SimpleThread implements Runnable{
public void run()
{
if(Thread.currentThread().isDaemon())
System.out.println(Thread.currentThread().getName()+" is daemon thread");
else
System.out.println(Thread.currentThread().getName()+" is user thread");
}
}
public class DaemonThreadMain {
public static void main(String[] args){
SimpleThread st=new SimpleThread();
Thread th1=new Thread(st,"Thread 1");//creating threads
Thread th2=new Thread(st,"Thread 2");
Thread th3=new Thread(st,"Thread 3");
th2.setDaemon(true);//now th2 is daemon thread
th1.start();//starting all threads
th2.start();
th3.start();
}
}
运行上面的程序时,我们将得到以下输出:
Thread 1 is user thread Thread 3 is user thread Thread 2 is daemon thread
Please note that you can not convert user thread to daemon thread once it is started otherwise it will throw IllegalThreadStateException.
package org.arpit.theitroad;
class SimpleThread implements Runnable{
public void run()
{
if(Thread.currentThread().isDaemon())
System.out.println(Thread.currentThread().getName()+" is daemon thread");
else
System.out.println(Thread.currentThread().getName()+" is user thread");
}
}
public class DaemonThreadMain {
public static void main(String[] args){
SimpleThread st=new SimpleThread();
Thread th1=new Thread(st,"Thread 1");//creating threads
Thread th2=new Thread(st,"Thread 2");
Thread th3=new Thread(st,"Thread 3");
th1.start();//starting all threads
th2.start();
th3.start();
th2.setDaemon(true);//now converting user thread to daemon thread after starting the thread.
}
}
运行上面的程序时,我们将得到以下输出:
Thread 1 is user threadException in thread “main" Thread 2 is user thread Thread 3 is user thread java.lang.IllegalThreadStateException at java.lang.Thread.setDaemon(Thread.java:1388) at org.arpit.theitroad.DaemonThreadMain.main(DaemonThreadMain.java:28)

