acabo escribió el siguiente código como una prueba:
public class DaemonThreadPlay {
public static void main(String [] args) {
Thread daemonThread = new Thread() {
public void run() {
while (true) {
try {
System.out.println("Try block executed");
Thread.sleep(1000l);
} catch (Throwable t) {
t.printStackTrace();
}
}
}
@Override
public void finalize() {
System.out.println("Finalize method called");
}
};
daemonThread.setDaemon(true);
daemonThread.start();
try {
Thread.sleep(2500l);
} catch (Throwable t) {
//NO-OP
}
}
}
puse los puntos de interrupción en el bloque catch del hilo de utilidad y en el método de finalización. Ninguno de los puntos de corte se alcanzó aunque se ejecutó el bloque try. Obviamente, este código tiene problemas de sincronización/sincronización, pero creo que podemos concluir con seguridad que los hilos daemon no se interrumpen al apagarlos ni se invocan necesariamente sus métodos finalize().
Siempre se puede añadir un gancho de cierre a la JVM Duración:
Thread shutdownHook = ... // construct thread that somehow
// knows about all the daemon threads
Runtime.getRuntime().addShutdownHook(shutdownHook);
su gancho de cierre se puede hacer, obviamente, cualquier tarea que se requieren para un cierre "agraciado".
¿Miraste el código fuente? –
@StephenC Eso no se me había ocurrido, y definitivamente daría una respuesta definitiva (aunque no innecesariamente útil). Personalmente, sin embargo, no soy lo suficientemente valiente como para intentarlo y no espero que nadie más lo haga. –
Bien, déjame ser más explícito. La mejor manera de responder a una pregunta como esta es mirar el código fuente, o al menos el código Java. En general, es fácil de leer y bien comentado.(Y no entiendo cómo una respuesta definitiva a una pregunta es menos útil que una no definitiva ... especialmente si * usted * fue la persona que leyó el código!) –