Thread daemon in Java

Mohammad Irfan 12 ottobre 2023
  1. Crea thread daemon utilizzando il metodo setDaemon() in Java
  2. Crea thread daemon usando il metodo setDaemon() in Java
  3. Crea thread daemon usando il metodo setDaemon() in Java
Thread daemon in Java

Questo tutorial introdurrà cos’è il thread daemon e come creare un thread daemon in Java.

In Java, un thread daemon è un thread speciale che supporta thread in background per altri thread. Java utilizza questi thread per scopi speciali per i thread utente e la garbage collection, ecc.

Per creare un thread daemon, Java fornisce il metodo setDaemon() che accetta un argomento booleano. Il metodo isDaemon() può controllare se il thread in esecuzione è o meno un thread Daemon.

Crea thread daemon utilizzando il metodo setDaemon() in Java

In questo esempio, usiamo il metodo setDaemon() della classe Thread per creare un thread daemon. Creiamo tre thread e due di essi sono impostati come thread daemon. Usiamo il metodo isDaemon() per controllare se il thread in esecuzione è o meno un thread daemon. Vedi l’esempio sotto.

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();
  }
}

Produzione:

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

Crea thread daemon usando il metodo setDaemon() in Java

Il thread del daemon è il thread a bassa priorità e viene eseguito sempre dietro i thread dell’utente. Possiamo vedere la priorità di un thread usando il metodo getPriority() che restituisce un valore intero. Usiamo il metodo getName() per recuperare il nome del thread in esecuzione corrente. Vedi l’esempio sotto.

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();
  }
}

Produzione:

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

Crea thread daemon usando il metodo setDaemon() in Java

Avviamo il thread dopo aver impostato un valore sul metodo setDaemon() durante la creazione di un thread daemon. È essenziale perché se impostiamo un thread già in esecuzione come daemon, verrà generata un’eccezione. Chiamiamo il metodo start() con thread1 e poi chiamiamo setDaemon(), che non è consentito. Vedi l’esempio sotto.

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();
  }
}

Produzione:

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

Articolo correlato - Java Thread