logo

Tópico Daemon Java

Um thread daemon é um thread em segundo plano de baixa prioridade que não impede a saída da JVM quando o programa termina a execução

  • Threads daemon são executados em segundo plano para oferecer suporte a threads de usuário.
  • A JVM é encerrada automaticamente quando todos os threads do usuário (não daemon) são concluídos.
  • Eles são criados usando a mesma classe Thread, mas são marcados como daemon usando o método setDaemon(true).
  • O método setDaemon(true) deve ser chamado antes do thread ser iniciado.
  • Exemplos comuns incluem Garbage Collector e Finalizer Thread.

Sintaxe

Java
thread.setDaemon(true); 

Casos de uso

  1. Coleta de lixo: O Garbage Collector (GC) em Java é executado como um thread daemon.
  2. Monitoramento em segundo plano: Threads daemon podem monitorar o estado dos recursos ou conexões dos componentes do aplicativo.
  3. Serviços de registro e auditoria: Threads daemon podem ser usados ​​para registrar atividades em segundo plano continuamente.
  4. Operações de limpeza: Threads daemon podem limpar periodicamente arquivos temporários, liberar recursos não utilizados ou realizar limpeza de cache.
  5. Tarefas do agendador ou temporizador: Os agendadores em segundo plano geralmente usam threads daemon para acionar tarefas em intervalos fixos.

Métodos usados

  • void setDaemon(booleano ativado): Marca um thread como daemon ou thread de usuário. Deve ser chamado antes de start().
  • booleano isDaemon(): Verifica se um thread é daemon.

Criando um Thread Daemon

Java
public class DaemonExample extends Thread {  public void run() {  if (Thread.currentThread().isDaemon()) {  System.out.println('Daemon thread running...');  } else {  System.out.println('User thread running...');  }  }  public static void main(String[] args) {  DaemonExample t1 = new DaemonExample();  DaemonExample t2 = new DaemonExample();  t1.setDaemon(true); // must be set before start()  t1.start();  t2.start();  } } 

Saída
Daemon thread running... User thread running... 

Comportamento do Daemon Thread

Java
public class DaemonBehavior extends Thread {  public void run() {  while (true) {  System.out.println('Daemon thread running...');  }  }  public static void main(String[] args) {  DaemonBehavior t = new DaemonBehavior();  t.setDaemon(true);  t.start();  System.out.println('Main (user) thread ends...');  } } 

Saída
Main (user) thread ends... 

A JVM termina imediatamente após o encadeamento principal terminar, mesmo que o encadeamento daemon ainda esteja em execução.

Notas importantes

  • Um thread herda o status do daemon do thread que o cria.
  • O método setDaemon(true) lança IllegalThreadStateException se chamado após start().
  • Threads daemon não devem ser usados ​​para tarefas que exigem conclusão, como gravação em um arquivo ou atualização de um banco de dados.
  • A JVM encerra todos os threads do daemon abruptamente sem realizar operações de limpeza.

Diferença entre thread de usuário e thread de daemon

BaseTópico do usuárioTópico Daemon
PropósitoExecuta as principais tarefas do aplicativoExecuta serviços em segundo plano
Vida útilMantém a JVM ativa até terminarTermina quando todos os threads do usuário terminam
PrioridadeGeralmente mais altoGeralmente mais baixo
Saída JVMJVM aguarda conclusãoJVM sai mesmo em execução
ExemplosThreads de trabalho do thread principalMonitores de fundo do coletor de lixo
Criar questionário