"Aquí hay un tema nuevo e interesante".

"Resulta que puedes iniciar hilos en diferentes modos".

"Un programa estándar (con un solo subproceso) deja de ejecutarse cuando el subproceso principal termina su trabajo. El subproceso principal termina de ejecutarse, el programa finaliza y la JVM libera su memoria".

"Si iniciamos un subproceso secundario, el programa sigue ejecutándose, incluso si finaliza el subproceso principal. La JVM no finaliza siempre que haya al menos un subproceso en ejecución. Una vez que finalizan todos los subprocesos en ejecución, el programa se cierra".

"Bueno, los programas grandes a menudo tienen los llamados 'hilos de servicio' cuyo trabajo es dar servicio a otras partes del programa. Por sí solos, no son necesarios. Por ejemplo: eliminar objetos no utilizados (recolección de basura), volcados de memoria y error registro, varios informes sobre el estado actual del programa, etc.

"Estos subprocesos de servicio son necesarios cuando el programa se está ejecutando, pero no son necesarios por sí solos".

"Sí, lo entiendo."

"Java le permite ejecutar un subproceso como un demonio . Dichos subprocesos funcionan igual que otros, pero si todos los subprocesos que no son demonio en un programa han terminado y solo quedan subprocesos demonio, la JVM cerrará el programa".

"Entonces, declarar un subproceso de 'servicio' solo significa que no se considera cuando finaliza el programa. ¿Eso es todo?"

"Uhhhh... Bueno, seguro que dijiste eso corto y dulce. Esencialmente, eso es lo que quería decirte".

"La brevedad es un talento. Y los robots talentosos son talentosos en todo".

"¿Alguna pregunta?"

"¿Cómo se inicia un hilo como demonio? ¿Se hereda de alguna clase DaemonThread?"

"No, es mucho más simple que eso. La clase Thread tiene un método setDaemon (booleano). Solo tiene que pasar true y eso es todo. Solo necesita llamarlo antes de llamar al método start(), antes de que el hilo real sea creado. No puede cambiar el tipo de un subproceso después de que comience a ejecutarse".

Ejemplo:
Thread thread = new LoggerThread();
thread.setDaemon(true);
thread.start();

"¿Y eso es?"

"Sí."

"Quiero llamar su atención una vez más sobre el proceso de creación e inicio de un hilo".

"Crear un objeto Thread no crea un hilo. Un objeto Thread no es un hilo. La JVM crea un hilo cuando se llama al método start(). Un hilo es un objeto JVM especial que le permite acceder a información sobre un hilo y le da tienes un poco de control sobre eso".

"Ya veo. Gracias, Ellie".