Java中的守护程序线程

Java中的守护程序线程是一个服务提供者线程, 向用户线程提供服务。它的寿命取决于用户线程的摆布, 即当所有用户线程死亡时, JVM会自动终止该线程。
有许多自动运行的Java守护程序线程, 例如gc, 终结器等
你可以通过在命令提示符下键入jconsole来查看所有详细信息。 jconsole工具提供有关已加载类, 内存使用情况, 正在运行的线程等的信息。
Java守护程序线程要记住的要点

  • 它为后台支持任务的用户线程提供服务。除了为用户线程服务之外, 它在生活中没有任何作用。
  • 它的寿命取决于用户线程。
  • 它是低优先级线程。
如果没有用户线程, 为什么JVM终止守护程序线程?
守护程序线程的唯一目的是为后台线程提供服务给用户线程。如果没有用户线程, JVM为什么要继续运行该线程。这就是为什么JVM在没有用户线程的情况下终止守护程序线程的原因。
线程类的Java Daemon线程方法
java.lang.Thread类为java守护程序线程提供了两种方法。
没有。 方法 描述
1) public void setDaemon(boolean status) 用于将当前线程标记为守护程序线程或用户线程。
2) public boolean isDaemon() 用于检查current是否是守护程序。
Java中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 threadt1.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(); } }

【Java中的守护程序线程】立即测试
Output:exception in thread main: java.lang.IllegalThreadStateException

    推荐阅读