📅  最后修改于: 2020-09-27 01:20:23             🧑  作者: Mango
Java中的守护程序线程是服务提供者线程,它为用户线程提供服务。它的寿命取决于用户线程的摆布,即当所有用户线程死亡时,JVM会自动终止该线程。
有许多自动运行的Java守护程序线程,例如gc,finalizer等。
您可以通过在命令提示符下键入jconsole来查看所有详细信息。 jconsole工具提供有关已加载类,内存使用情况,正在运行的线程等的信息。
守护程序线程的唯一目的是为后台支持任务向用户线程提供服务。如果没有用户线程,那么JVM为什么要继续运行该线程。这就是为什么JVM在没有用户线程的情况下终止守护程序线程的原因。
java.lang.Thread类为java守护程序线程提供了两种方法。
No. | Method | Description |
---|---|---|
1) | public void setDaemon(boolean status) | is used to mark the current thread as daemon thread or user thread. |
2) | public boolean isDaemon() | is used to check that current is daemon. |
文件:MyThread.java
public class TestDaemonThread1 extends Thread{
public void run(){
if(Thread.currentThread().isDaemon()){//checking for daemon thread
System.out.println("daemon thread work");
}
else{
System.out.println("user thread work");
}
}
public static void main(String[] args){
TestDaemonThread1 t1=new TestDaemonThread1();//creating thread
TestDaemonThread1 t2=new TestDaemonThread1();
TestDaemonThread1 t3=new TestDaemonThread1();
t1.setDaemon(true);//now t1 is daemon thread
t1.start();//starting threads
t2.start();
t3.start();
}
}
daemon thread work
user thread work
user thread work
注意:如果要将用户线程设置为守护程序,则不得启动它,否则它将引发IllegalThreadStateException。
文件:MyThread.java
class TestDaemonThread2 extends Thread{
public void run(){
System.out.println("Name: "+Thread.currentThread().getName());
System.out.println("Daemon: "+Thread.currentThread().isDaemon());
}
public static void main(String[] args){
TestDaemonThread2 t1=new TestDaemonThread2();
TestDaemonThread2 t2=new TestDaemonThread2();
t1.start();
t1.setDaemon(true);//will throw exception here
t2.start();
}
}
Output:exception in thread main: java.lang.IllegalThreadStateException