System.exit()
se puede usar para ejecutar ganchos de apagado antes de que se cierre el programa. Esta es una forma conveniente de manejar el apagado en programas más grandes, donde todas las partes del programa no pueden (y no deben) ser conscientes entre sí. Luego, si alguien quiere renunciar, simplemente puede llamarSystem.exit()
, y los ganchos de cierre (si están configurados correctamente) se encargan de hacer todas las ceremonias de cierre necesarias, como cerrar archivos, liberar recursos, etc.
"Este método nunca vuelve normalmente". significa solo que el método no volverá; Una vez que un hilo va allí, no volverá.
Otra forma, quizás más común, de salir de un programa es simplemente llegar al final del main
método. Pero si hay subprocesos no daemon en ejecución, no se cerrarán y, por lo tanto, la JVM no se cerrará. Por lo tanto, si tiene hilos no daemon, necesita otros medios (además de los ganchos de cierre) para cerrar todos los hilos no daemon y liberar otros recursos. Si no hay otros subprocesos que no sean daemon, al regresar de main
cerrará la JVM y llamará a los ganchos de cierre.
Por alguna razón, los ganchos de cierre parecen ser un mecanismo infravalorado y mal entendido, y la gente está reinventando la rueda con todo tipo de hacks personalizados patentados para abandonar sus programas. Yo recomendaría usar ganchos de apagado; todo está allí en el tiempo de ejecución estándar que usarás de todos modos.