Java教程

Java守护程序线程

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

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

它为用户线程提供后台支持任务的服务。除了服务用户线程外,它在生活中没有任何作用。 它的寿命取决于用户线程。 这是低优先级线程。

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

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

按线程类的Java守护进程线程的方法

java.lang.Thread类为Java守护程序线程提供了两种方法。
方法 说明
public void setDaemon(boolean status) 用于将当前线程标记为守护程序线程或用户线程。
public boolean isDaemon() 用于检查current是否是守护程序。

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

文件: 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 workuser thread workuser 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
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4