Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误和异常

Java 多线程

Java 同步

Java 网络

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java API 和框架

Java 类参考

Java 有用资源

Java - 守护线程



Java 中的守护线程

守护线程是为了支持用户线程而创建的。它通常在后台工作,并在所有其他线程关闭后终止。垃圾回收器是守护线程的一个例子。

Java 中守护线程的特征

  • 守护线程是一个低 优先级线程

  • 守护线程是一个服务提供线程,不应作为用户线程使用。

  • 如果不存在活动线程,JVM 会自动关闭守护线程,如果用户线程再次激活,则会重新激活它。

  • 如果所有用户线程都已完成,守护线程无法阻止 JVM 退出。

Java 守护线程的 Thread 类方法

以下是 Thread 类 为 Java 中的守护线程提供的几种方法:

Java 守护线程的示例

在此示例中,我们创建了一个 ThreadDemo 类,它扩展了 Thread 类。在 main 方法中,我们创建了三个线程。由于我们没有将任何线程设置为守护线程,因此没有线程被标记为守护线程。

package com.tutorialspoint;
class ThreadDemo extends Thread {
   ThreadDemo( ) {
   }
   public void run() {
      System.out.println("Thread  " + Thread.currentThread().getName() 
         + ", is Daemon: " + Thread.currentThread().isDaemon());
   }
   public void start () {     
      super.start();
   }
}
public class TestThread {
   public static void main(String args[]) {
	  ThreadDemo thread1 = new ThreadDemo();
	  ThreadDemo thread2 = new ThreadDemo();
	  ThreadDemo thread3 = new ThreadDemo();
	  thread1.start();
	  thread2.start();
	  thread3.start();
   }
}

输出

Thread  Thread-1, is Daemon: false
Thread  Thread-0, is Daemon: false
Thread  Thread-2, is Daemon: false

Java 守护线程的更多示例

示例 1

在此示例中,我们创建了一个 ThreadDemo 类,它扩展了 Thread 类。在 main 方法中,我们创建了三个线程。由于我们将一个线程设置为守护线程,因此一个线程将被打印为守护线程。

package com.tutorialspoint;
class ThreadDemo extends Thread {
   ThreadDemo( ) {
   }

   public void run() {
      System.out.println("Thread  " + Thread.currentThread().getName() 
         + ", is Daemon: " + Thread.currentThread().isDaemon());
   }
   public void start () {     
      super.start();
   }
}
public class TestThread {
   public static void main(String args[]) {
	  ThreadDemo thread1 = new ThreadDemo();
	  ThreadDemo thread2 = new ThreadDemo();
	  ThreadDemo thread3 = new ThreadDemo();
      thread3.setDaemon(true);
	  thread1.start();
	  thread2.start();
	  thread3.start();
   }
}

输出

Thread  Thread-1, is Daemon: false
Thread  Thread-2, is Daemon: true
Thread  Thread-0, is Daemon: false

示例 2

在此示例中,我们创建了一个 ThreadDemo 类,它扩展了 Thread 类。在 main 方法中,我们创建了三个线程。线程启动后,不能将其设置为守护线程。由于我们在线程启动后将其设置为守护线程,因此将引发运行时异常。

package com.tutorialspoint;
class ThreadDemo extends Thread {
   ThreadDemo( ) {
   }
   public void run() {
      System.out.println("Thread  " + Thread.currentThread().getName() 
         + ", is Daemon: " + Thread.currentThread().isDaemon());
   }
   public void start () {     
      super.start();
   }
}
public class TestThread {
   public static void main(String args[]) {
	   ThreadDemo thread1 = new ThreadDemo();
	   ThreadDemo thread2 = new ThreadDemo();
	   ThreadDemo thread3 = new ThreadDemo();
	   thread1.start();
	   thread2.start();
	   thread3.start();
      thread3.setDaemon(true);
   }
}

输出

Exception in thread "main" Thread  Thread-1, is Daemon: false
Thread  Thread-2, is Daemon: false
Thread  Thread-0, is Daemon: false
java.lang.IllegalThreadStateException
	at java.lang.Thread.setDaemon(Unknown Source)
	at com.tutorialspoint.TestThread.main(TestThread.java:27)
广告