cuando pulso ctrl - c en la consola en qué secuencia se detienen hebras de la aplicación y los ganchos de cierre llaman?¿Cómo funciona el CTRL-C con el programa Java
Respuesta
De acuerdo con los javadocs, los ganchos de cierre registradas también llamados en una no especificado orden cuando la JVM se inicia el cierre; p.ej. en respuesta a un CTRL-C.
Los hilos de aplicación no se "detienen" de ninguna manera bien definida. De hecho, podrían continuar funcionando hasta que el proceso finalice.
Si desea que sus hilos se cierren de manera ordenada, debe hacer algo en un gancho de apagado para que esto suceda. Por ejemplo, un gancho de desconexión puede llamar al Thread.interrupt()
para indicar a los subprocesos de trabajo que dejen de hacer lo que están haciendo ... y llamar al join()
para asegurarse de que haya sucedido.
Precaución; 'Thread.join()' puede causar un interbloqueo durante el apagado a la espera de un hilo que no respeta la interrupción. Es una buena idea usar ['Thread.join (long)'] (http://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#join-long-) con un tiempo de espera razonable para garantizar que los hilos que se comportan mal no bloqueen la salida del proceso. – dimo414
Buen punto. Sin embargo, si tiene un hilo que no responde correctamente a una interrupción y desconecta la JVM independientemente, entonces existe el riesgo de que algo se descarte. Entonces, IMO, un mejor enfoque es encontrar y corregir la causa del "punto muerto"; es decir, cambiar el hilo ofensivo para tratar las interrupciones correctamente. –
Sé que puede especificar lo que debería suceder cuando se pulsa Ctrl-C agregando un gancho de apagado. Pero no estoy seguro en qué orden.
private static void createShutDownHook()
{
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable()
{
@Override
public void run()
{
System.out.println();
System.out.println("Thanks for using the application");
System.out.println("Exiting...");
}
}));
}
- 1. ¿Cómo usar Sqoop en el programa Java?
- 2. Cómo ejecutar el programa Java en el símbolo del sistema
- 3. Abrir con ... un programa Java
- 4. ¿Cómo encontrar el tiempo necesario para ejecutar el programa Java?
- 5. ¿Cómo funciona el finalize() en Java?
- 6. ¿Cómo funciona el método keyPressEvent en este programa?
- 7. comprobar el programa java de instancia única
- 8. ¿Cómo funciona el trabajo sincronizado en Java
- 9. ¿Cómo funciona el método hashCode() de java?
- 10. ¿Cómo funciona el método Java run()?
- 11. start-stop-daemon y el programa java
- 12. Cómo empaquetar el programa Twisted con py2exe?
- 13. cómo compilar y ejecutar el programa java en otro programa java?
- 14. Obtener el nombre del programa Java
- 15. programa externo de parada cuando el programa Java se detuvo
- 16. Problema en el programa TCP (Java)
- 17. Cómo ejecutar el programa Java en el terminal con la biblioteca externa JAR
- 18. Cómo cerrar una aplicación java desde el programa
- 19. Incrustar swank-clojure en el programa java
- 20. ¿Cómo hacer que el programa Java sea instalable?
- 21. ¿Cómo puedo arreglar un programa de la GUI de Java (swing), que funciona con awesome-wm?
- 22. Cómo abrir un archivo con el programa asociado predeterminado
- 23. ¿Cómo encuentro el programa con el enfoque actual?
- 24. ¿Cómo ejecutar el programa de iPhone con el instrumento Zombies?
- 25. ¿cómo funciona el despachador?
- 26. Terminar el proceso ejecutado con `exec` cuando el programa finaliza
- 27. ¿Cómo ejecutar testcase externo (Class, junit) en el programa java?
- 28. ¿Cómo ejecutar el programa Java y obtener resultados en PHP?
- 29. Ubuntu Java: busque el pid de un programa específico y elimine el programa
- 30. ¿Cómo funciona el #! Shebang trabajo?
para citar los documentos: [Cuando la máquina virtual comienza su secuencia de apagado iniciará todos los enganches de cierre registrados en algún orden no especificado y los dejará ejecutar simultáneamente. Cuando todos los enganches hayan finalizado, se ejecutarán todos los finalizadores no invocados si se ha habilitado la finalización a la salida.] (Http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html) por lo tanto, podemos reunir ganchos de cierre siempre se llama primero independientemente, lo que tiene sentido o lo que sería el punto de tal gancho si los hilos se cierran primero? Para decirle a un usuario que sus datos se han ido –