个性化阅读
专注于IT技术分析

Java中的守护程序线程

Java中的守护程序线程是一个服务提供者线程, 向用户线程提供服务。它的寿命取决于用户线程的摆布, 即当所有用户线程死亡时, JVM会自动终止该线程。

有许多自动运行的Java守护程序线程, 例如gc, 终结器等

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

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

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

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

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


线程类的Java Daemon线程方法

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

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

Java中Daemon线程的简单示例

文件: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
赞(0)
未经允许不得转载:srcmini » Java中的守护程序线程

评论 抢沙发

评论前必须登录!