logo

Hilo del demonio de Java

Un hilo de demonio es un hilo en segundo plano de baja prioridad que no impide que la JVM salga cuando el programa finaliza la ejecución.

  • Los subprocesos de Daemon se ejecutan en segundo plano para admitir subprocesos de usuario.
  • La JVM sale automáticamente cuando se completan todos los subprocesos de usuario (que no son demonios).
  • Se crean usando la misma clase Thread pero se marcan como demonio usando el método setDaemon(true).
  • Se debe llamar al método setDaemon(true) antes de que comience el hilo.
  • Los ejemplos comunes incluyen el recolector de basura y el subproceso finalizador.

Sintaxis

Java
thread.setDaemon(true); 

Casos de uso

  1. Recolección de basura: El recolector de basura (GC) en Java se ejecuta como un hilo de demonio.
  2. Monitoreo de antecedentes: Los subprocesos de Daemon pueden monitorear el estado de los recursos o conexiones de los componentes de la aplicación.
  3. Servicios de registro y auditoría: Los subprocesos de Daemon se pueden utilizar para registrar actividades en segundo plano de forma continua.
  4. Operaciones de limpieza: Los subprocesos del demonio pueden borrar periódicamente archivos temporales, liberar recursos no utilizados o realizar una limpieza de caché.
  5. Tareas del programador o temporizador: Los programadores en segundo plano suelen utilizar subprocesos de demonio para activar tareas a intervalos fijos.

Métodos utilizados

  • void setDaemon (booleano activado): Marca un hilo como demonio o hilo de usuario. Debe llamarse antes de iniciar().
  • booleano esDaemon(): Comprueba si un hilo es un demonio.

Creando un hilo de demonio

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

Producción
Daemon thread running... User thread running... 

Comportamiento del hilo demoníaco

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...');  } } 

Producción
Main (user) thread ends... 

La JVM finaliza inmediatamente después de que finaliza el hilo principal, aunque el hilo del demonio todavía se esté ejecutando.

Notas importantes

  • Un hilo hereda el estado de demonio del hilo que lo crea.
  • El método setDaemon(true) arroja IllegalThreadStateException si se llama después de start().
  • Los subprocesos de Daemon no deben usarse para tareas que requieran completarse, como escribir en un archivo o actualizar una base de datos.
  • JVM finaliza todos los subprocesos del demonio abruptamente sin realizar operaciones de limpieza.

Diferencia entre hilo de usuario y hilo de demonio

BaseHilo de usuarioHilo demoníaco
ObjetivoEjecuta las principales tareas de la aplicación.Realiza servicios en segundo plano.
Ciclo vitalMantiene viva la JVM hasta que termineTermina cuando finalizan todos los hilos de usuario.
PrioridadGeneralmente más altoGeneralmente más bajo
Salir de JVMJVM espera a que se completeJVM sale incluso si se está ejecutando
EjemplosHilos de trabajo del hilo principalMonitores de fondo del recolector de basura
Crear cuestionario