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)
廣告