Daemon Thread em Java

Mohammad Irfan 12 outubro 2023
  1. Criar thread daemon usando o método setDaemon() em Java
  2. Criar thread daemon usando o método setDaemon() em Java
  3. Criar thread daemon usando o método setDaemon() em Java
Daemon Thread em Java

Este tutorial irá apresentar o que é o encadeamento daemon e como criar um encadeamento daemon em Java.

Em Java, um encadeamento daemon é um encadeamento especial que suporta encadeamentos em segundo plano para outros encadeamentos. Java usa esses encadeamentos para servir a propósitos especiais para encadeamentos do usuário e coleta de lixo, etc.

Para criar um encadeamento daemon, Java fornece o método setDaemon() que recebe um argumento booleano. O método isDaemon() pode verificar se o encadeamento em execução atual é um encadeamento Daemon ou não.

Criar thread daemon usando o método setDaemon() em Java

Neste exemplo, usamos o método setDaemon() da classe Thread para criar um daemon thread. Nós criamos três threads, e dois deles são definidos como threads daemon. Usamos o método isDaemon() para verificar se o thread em execução atual é um thread daemon ou não. Veja o exemplo abaixo.

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

Resultado:

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

Criar thread daemon usando o método setDaemon() em Java

O encadeamento daemon é o encadeamento de baixa prioridade e sempre é executado atrás dos encadeamentos do usuário. Podemos ver a prioridade de uma thread usando o método getPriority() que retorna um valor inteiro. Usamos o método getName() para buscar o nome do thread em execução atual. Veja o exemplo abaixo.

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

Resultado:

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

Criar thread daemon usando o método setDaemon() em Java

Iniciamos a thread após definir um valor para o método setDaemon() ao criar uma thread daemon. É essencial porque se definirmos um thread já em execução como um daemon, ele lançará uma exceção. Chamamos o método start() com thread1 e depois chamamos setDaemon(), o que não é permitido. Veja o exemplo abaixo.

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

Resultado:

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

Artigo relacionado - Java Thread