2009-05-18 23 views
5

estoy plenamente consciente del impacto de marcar un hilo como un hilo de utilidad en la salida JVM (si toda la salida hilos no demonio, la JVM se cerrará.)¿Qué significa ser un hilo daemon?

¿Hay otros efectos secundarios a establecer un hilo como un daemon?

(como un completo aparte, que es realmente irrelevante excepto para la semántica, el significado de un hilo daemon no es al revés en este caso: ¿un hilo daemon debería mantener viva la JVM ... por ejemplo, si escribiera mi propio daemon HTTP y lo comencé a ejecutar, ¿no querría que la JVM permanezca activa mientras ese hilo esté vivo? ¿O hay alguna otra semántica para el término 'daemon'?)

+2

Normalmente tiene subprocesos de daemon y subprocesos no de daemon ejecutándose al mismo tiempo: los subprocesos no-demonio están haciendo un trabajo útil, pero los subprocesos de daemon están ahí esperando que ocurra algo. Después de que se realiza el trabajo útil, el programa debe salir; no quieres que se sostenga por hilos que no están haciendo nada. En su ejemplo, el daemon HTTP es un proceso * daemon *, no un hilo daemon. Uno podría imaginar una computadora de escritorio que se apaga cuando no se están ejecutando procesos que no sean demonios, y no le gustaría que un servidor la mantuviera encendida. (O tal vez lo haría ... lo que sea, no es el mejor nombre.) –

+0

Sí - entiendo el comportamiento perfectamente, y explotándolo regularmente. Mi comentario completamente al azar fue solo una pregunta para ver si otros estaban de acuerdo con la confusión del nombre :) – Jared

+1

No es realmente confuso, se espera que un daemon nunca salga - para estar siempre ejecutándose cuando el programa se está ejecutando, ya que NUNCA salgan realmente, no deberían detener la salida del programa. –

Respuesta

4

Como usted lo tiene, significa que el hilo está separado y se ejecutará mientras se ejecuta la JVM, a menos que lo detenga explícitamente. Por especificación, la JVM sigue ejecutándose mientras se esté ejecutando cualquier no -daemon thread.

Más allá de eso, no significa mucho de nada.

Se podría argumentar que esto es al revés - después de todo, apagado (8) mata los procesos daemon - pero la JVM debe actuar como un proceso de buen comportamiento de otro modo, lo que significa que las personas deben ser capaces de esperar a que termine sin tener que ser asesinado. Entonces, esta especificación es una decisión de diseño basada en cuál será el caso de uso más común.

3

Un subproceso de daemon es un servicio para otros subprocesos. Es solo un daemon para el jvm y no para el mundo exterior. por lo tanto, si solo los demonios excitan, ya no tienen más uso. Si desea un daemon http, simplemente escriba un httpserver con hilos normales e inícielo como daemon utilizando el conjunto de herramientas de su sistema operativo para ejecutar aplicaciones como daemon.

Para conlcuir un hilo daemon en jvm no es un hilo daemon para el sistema operativo. Los daemons generalmente son bucles infinitos y no quieres que tu jvm continúe infinitamente mientras que todo lo que tienes son unos cuantos daemons que esperan la entrada (que no está disponible).

Cuestiones relacionadas