¿Qué sucede si se llama a System.exit desde un gancho de apagado?

Tengo un cierre bastante complicado en Java: hay mucho trabajo de limpieza que hacer. En particular, estoy tratando de averiguar cómo manejar el error desde un subproceso de enganche de cierre. Mi código incluye esto actualmente:

try {
    return shutdownPromise = doShutdown();
}
catch (Throwable exc) {
    logger.error("An exception was thrown while shutting down the application.", exc);  
    System.exit(1);
    return null;
}

Cuando escribí esto originalmente, básicamente pensé que un error en el cierre debería ir directamente aexit. Peroexit no es tan bajo nivel; llama a los ganchos de apagado.

Así que pensé -

¿Qué hace la llamada salir de un gancho de apagado?¿Cuál es la forma correcta de manejar el error desde un gancho de apagado?

Respuestas a la pregunta(1)

Su respuesta a la pregunta