Diferencia entre subprocesos Daemon y subprocesos de usuario en Java

En Java, hay dos tipos de hilos:

  1. Hilo de demonio
  2. Hilo de usuario

Los subprocesos de daemon son subprocesos de baja prioridad que siempre se ejecutan en segundo plano y los subprocesos de usuario son subprocesos de alta prioridad que siempre se ejecutan en primer plano. User Thread o Non-Daemon están diseñados para realizar tareas específicas o complejas donde los subprocesos de daemon se utilizan para realizar tareas de soporte.

Diferencia entre subprocesos Daemon y subprocesos de usuario en Java

  1. JVM no espera a que finalice el subproceso del demonio, sino que espera el subproceso del usuario: la primera y más importante diferencia entre los subprocesos del demonio y del usuario es que JVM no esperará a que el subproceso del demonio termine su tarea, sino que esperará a cualquier subproceso de usuario activo.
    Por ejemplo, uno podría haber notado este comportamiento al ejecutar el programa Java en NetBeans que incluso si el hilo principal ha terminado, el botón superior izquierdo hacia abajo todavía está rojo, lo que muestra que el programa Java aún se está ejecutando. Esto se debe a cualquier subproceso de usuario generado desde el subproceso principal, pero con el subproceso principal uno no ve ese punto rojo en NetBeans.

  2. Prioridad de subproceso: los subprocesos de usuario son de alta prioridad en comparación con el subproceso daemon, lo que significa que no obtendrán CPU tan fácilmente como un subproceso de usuario puede obtener.
  3. Creación de subprocesos: la aplicación suele crear subprocesos de usuario para ejecutar alguna tarea al mismo tiempo. Por otro lado, el subproceso daemon es creado principalmente por JVM como para algún trabajo de recolección de basura.
  4. Terminación del subproceso: JVM obligará al subproceso daemon a terminar si todos los subprocesos del usuario han terminado su ejecución pero el subproceso del usuario está cerrado por la aplicación o por sí mismo. Un subproceso de usuario puede seguir ejecutándose mediante la JVM, pero un subproceso de daemon no puede seguir ejecutándose mediante la JVM. Esta es la diferencia más crítica entre el subproceso de usuario y el demonio.
  5. Uso: los subprocesos de demonios no se utilizan para ninguna tarea crítica. Cualquier tarea importante es realizada por hilo de usuario. Un subproceso daemon generalmente se usa para algunas tareas en segundo plano que no son tareas críticas.

La principal diferencia entre subprocesos de usuario y daemon:

Hilo de usuario Hilo de demonio
JVM espera hasta que los subprocesos del usuario terminen su trabajo. Nunca sale hasta que todos los subprocesos de usuario terminan su trabajo. La JVM no esperará a que los subprocesos del daemon terminen su trabajo. La JVM se cerrará tan pronto como todos los subprocesos de usuario terminen su trabajo.
JVM no obligará a los subprocesos de usuario a terminar, por lo que JVM esperará a que los subprocesos de usuario terminen por sí mismos. Si todos los subprocesos de usuario han terminado su trabajo, JVM obligará a los subprocesos del daemon a terminar
Los subprocesos de usuario son creados por la aplicación. Principalmente subprocesos Daemon creados por la JVM.
Principalmente, los subprocesos de usuario están diseñados para realizar alguna tarea específica. Los subprocesos de daemon están diseñados para admitir los subprocesos de usuario.
Los subprocesos de usuario son subprocesos en primer plano. Los subprocesos de Daemon son subprocesos de fondo.
Los subprocesos de usuario son subprocesos de alta prioridad. Los subprocesos Daemon son subprocesos de baja prioridad.
Su vida independiente. Su vida depende de los hilos de usuario.

Ejemplo: comprobar que el subproceso es Daemon o no

Uno puede hacer que un subproceso de usuario sea un subproceso daemon usando el método setDaemon (booleano). En este ejemplo, se verifica el tipo de subproceso (subproceso de usuario o subproceso de Daemon) utilizando el método isDaemon(). Devuelve verdadero si es un demonio, de lo contrario, devuelve falso.

// Java program check thread is Daemon or not
  
class MyThread extends Thread {
  
    @Override
    public void run()
    {
        System.out.println("User Thread or Non-Daemon Thread");
    }
}
  
class MainThread {
  
    public static void main(String[] args)
    {
  
        MyThread mt = new MyThread();
        mt.start();
  
        System.out.println("Main Thread");
  
        System.out.println("Is " + mt.getName()
                           + " a Daemon Thread: "
                           + mt.isDaemon());
  
        System.out.println("Is " + Thread.currentThread().getName()
                           + " a Daemon Thread: "
                           + Thread.currentThread().isDaemon());
    }
}
Producción:

Main Thread
Is Thread-0 a Daemon Thread: false
Is main a Daemon Thread: false
User Thread or Non-Daemon Thread

Ejemplo: Convertir un subproceso que no sea demonio en un subproceso de demonio:
En este ejemplo, un subproceso que no sea demonio se convierte en un demonio mediante setDeamon(booleano).

// Java program make user thread as a daemon thread
  
class MyThread extends Thread {
  
    @Override
    public void run()
    {
        System.out.println("Non-Daemon thread");
    }
}
  
class MainThread {
  
    public static void main(String[] args)
    {
        MyThread mt = new MyThread();
        System.out.println("Before using setDaemon() method: ");
        System.out.println("Is " + mt.getName()
                           + " a Daemon Thread: "
                           + mt.isDaemon());
  
        mt.setDaemon(true);
  
        System.out.println("After using setDaemon() method: ");
        System.out.println("Is " + mt.getName()
                           + " a Daemon Thread: "
                           + mt.isDaemon());
    }
}
Producción:

Before using setDaemon() method: 
Is Thread-0 a Daemon Thread: false
After using setDaemon() method: 
Is Thread-0 a Daemon Thread: true

Publicación traducida automáticamente

Artículo escrito por Rajput-Ji y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *