O que acontece se System.exit é chamado de um gancho de desligamento?

Eu tenho um desligamento bastante complicado em Java - há muito trabalho de limpeza para fazer. Em particular, estou tentando descobrir como tratar erros de um thread de gancho de desligamento. Meu código inclui isso atualmente:

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

Quando eu originalmente escrevi isso essencialmente pensei, um erro no desligamento deve ir direto paraexit. Masexit não é tão baixo nível; ele chama os ganchos de desligamento.

Então eu pensei -

O que a chamada de saída de um gancho de desligamento faz?Qual é o caminho certo para o erro de lidar com um gancho de desligamento?

questionAnswers(1)

yourAnswerToTheQuestion