Java 中的守護執行緒

Mohammad Irfan 2023年1月30日 2021年3月21日
  1. 在 Java 中使用 setDaemon() 方法建立守護執行緒
  2. 使用 Java 中的 setDaemon() 方法建立守護執行緒
  3. 使用 Java 中的 setDaemon() 方法建立守護執行緒
Java 中的守護執行緒

本教程將介紹什麼是守護執行緒以及如何在 Java 中建立守護執行緒。

在 Java 中,守護執行緒是一種特殊執行緒,支援其他執行緒的後臺執行緒。Java 使用這些執行緒來為使用者執行緒和垃圾回收等提供特殊用途。

為了建立守護執行緒,Java 提供了帶有布林引數的 setDaemon() 方法。isDaemon() 方法可以檢查當前正在執行的執行緒是否是 Daemon 執行緒。

在 Java 中使用 setDaemon() 方法建立守護執行緒

在此示例中,我們使用 Thread 類的 setDaemon() 方法建立守護執行緒。我們建立了三個執行緒,其中兩個被設定為守護執行緒。我們使用 isDaemon() 方法檢查當前正在執行的執行緒是否是守護執行緒。請參見下面的示例。

public class SimpleTesting extends Thread{
    public MainClass(String name){
        super(name); 
    }
    public void run() 
    {
        boolean isDaemon = Thread.currentThread().isDaemon();
        System.out.println("Is this daemon thread: "+isDaemon);
    }  
    public static void main(String[] args) {
        MainClass thread1 = new MainClass("Thread 1"); 
        MainClass thread2 = new MainClass("Thread 2"); 
        MainClass thread3 = new MainClass("Thread 3"); 
        thread1.setDaemon(true); 
        thread1.start();  
        thread2.start(); 
        thread3.setDaemon(true);  
        thread3.start();         
    }  
}

輸出:

Is this daemon thread: true
Is this daemon thread: false
Is this daemon thread: true

使用 Java 中的 setDaemon() 方法建立守護執行緒

守護執行緒是低優先順序執行緒,並且始終在使用者執行緒之後執行。通過使用返回整數值的 getPriority() 方法,我們可以看到執行緒的優先順序。我們使用 getName() 方法來獲取當前正在執行的執行緒的名稱。請參見以下示例。

public class SimpleTesting extends Thread{
    public MainClass(String name){
        super(name); 
    }
    public void run() 
    {
        boolean isDaemon = Thread.currentThread().isDaemon();
        System.out.println("Is this daemon thread: "+isDaemon+", "+Thread.currentThread().getName()+", "+Thread.currentThread().getPriority());
    }  
    public static void main(String[] args) {
        MainClass thread1 = new MainClass("Thread 1"); 
        MainClass thread2 = new MainClass("Thread 2"); 
        MainClass thread3 = new MainClass("Thread 3"); 
        thread1.setDaemon(true); 
        thread1.start();  
        thread2.start(); 
        thread3.setDaemon(true);  
        thread3.start();         
    }  
}

輸出:

Is this daemon thread: true, Thread 1, 5
Is this daemon thread: false, Thread 2, 5
Is this daemon thread: true, Thread 3, 5

使用 Java 中的 setDaemon() 方法建立守護執行緒

我們在建立守護執行緒時將值設定為 setDaemon() 方法後啟動執行緒。這一點是非常必要的,因為如果我們將一個已經在執行的執行緒設定為守護執行緒,它將丟擲異常。我們用 thread1 呼叫 start() 方法,然後呼叫 setDaemon(),這是不允許的。請參見以下示例。

public class SimpleTesting extends Thread{
    public MainClass(String name){
        super(name); 
    }
    public void run() 
    {
        boolean isDaemon = Thread.currentThread().isDaemon();
        System.out.println("Is this daemon thread: "+isDaemon+", "+Thread.currentThread().getName()+", "+Thread.currentThread().getPriority());
    }  
    public static void main(String[] args) {
        MainClass thread1 = new MainClass("Thread 1"); 
        MainClass thread2 = new MainClass("Thread 2"); 
        MainClass thread3 = new MainClass("Thread 3");  
        thread1.start();  
        thread1.setDaemon(true);
        thread2.start(); 
        thread3.setDaemon(true);  
        thread3.start();         
    }  
}

輸出:

Is this daemon thread: false, Thread 1, 5
Exception in thread "main" java.lang.IllegalThreadStateException

相關文章 - Java Thread