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.zaixian;

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.zaixian;

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.zaixian.TestDaemonThread2.main(TestDaemonThread2.java:13)

上一篇: 線程優先順序 下一篇: Java線程池