Java守护线程

java中的守护程序线程是一个服务提供程序线程,它为用户线程提供服务。 它的生命依赖于用户线程,即当所有用户线程都死掉时,JVM会自动终止该线程。

有许多java守护程序线程自动运行,例如 gcfinalizer

通过在命令提示符下键入jconsole来查看所有详细信息。 jconsole工具提供有关已加载类,内存使用情况,运行线程等的信息。

Java中的守护程序线程的要点

  • 它为用户线程提供后台支持任务的服务。它在生命中没有为服务用户线程而发挥作用。
  • 它的生命取决于用户线程。
  • 它是一个低优先级的线程。

如果没有用户线程,为什么JVM会终止守护程序线程?

守护程序线程的唯一目的是它为用户线程提供后台支持任务的服务。 如果没有用户线程,为什么JVM要继续运行这个线程?这就是为什么JVM在没有用户线程的情况下终止守护进程线程的原因。

Thread类的Java守护程序线程的方法

java.lang.Thread类为java守护程序线程提供了两种方法。

编号 方法 描述
1 public void setDaemon(boolean status) 用于将当前线程标记为守护程序线程或用户线程。
2 public boolean isDaemon() 用于检查当前是守护进程。

Java中守护程序线程的简单示例

文件:TestDaemonThread1.java

package com.zyiz;

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

文件:TestDaemonThread2.java

package com.zyiz;

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();
    }
}

执行上面示例代码,得到以下结果:

Exception in thread "main" Name: Thread-0
Daemon: false
java.lang.IllegalThreadStateException
    at java.lang.Thread.setDaemon(Unknown Source)
    at com.zyiz.TestDaemonThread2.main(TestDaemonThread2.java:13)

上一篇:线程优先级

下一篇:Java线程池

关注微信小程序
程序员编程王-随时随地学编程

扫描二维码
程序员编程王

扫一扫关注最新编程教程