猿教程 Logo

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()用于检查当前是守护进程。

Daemon线程在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 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();
 }
}
Output:exception in thread main: java.lang.IllegalThreadStateException


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Java/daemon-thread-java.html