Java中的守护线程

Java中的守护线程是为用户线程提供服务的线程。它的生命周期取决于用户线程,即当所有用户线程结束时,JVM会自动终止守护线程。

Java中有许多自动运行的守护线程,例如垃圾回收器(gc)、finalizer等。

您可以在命令提示符中输入jconsole来查看所有详细信息。jconsole工具提供有关加载的类、内存使用情况、运行的线程等信息。

Java中守护线程的要点

  • 它为后台支持任务的用户线程提供服务,除了为用户线程提供服务外,它没有其他生命周期。
  • 它的生命周期依赖于用户线程。
  • 它是低优先级线程。

为什么JVM在没有用户线程时会终止守护线程?

守护线程的唯一目的是为用户线程提供后台支持任务的服务。如果没有用户线程,为什么JVM要继续运行这个线程。因此,如果没有用户线程,JVM会终止守护线程。

Thread类提供的Java守护线程方法

java.lang.Thread类提供了两个方法用于Java守护线程。

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

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

文件:MyThread.java

public class TestDaemonThread1 extends Thread{  
 public void run(){  
  if(Thread.currentThread().isDaemon()){//检查守护线程 
   System.out.println("daemon thread work");  
  }  
  else{  
  System.out.println("user thread work");  
 }  
 }  
 public static void main(String[] args){  
  TestDaemonThread1 t1=new TestDaemonThread1();//创建线程 
  TestDaemonThread1 t2=new TestDaemonThread1();  
  TestDaemonThread1 t3=new TestDaemonThread1();  
  
  t1.setDaemon(true);//现在t1是守护线程  
    
  t1.start();//启动线程  
  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);//将在此处抛出异常 
  t2.start();  
 }  
}  

输出:

exception in thread main: java.lang.IllegalThreadStateException

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想