É comum em softwares que rodam em servidor implementar-se algo conhecido como uma barreira de exceções: se durante a execução de um código, uma exceção não esperada ocorre e não há nenhum tratamento preparado, a exceção é propagada até o bootstrapper da JVM que a “cospe” no console. Evita-se isso colocando um nível de indireção logo após o bootstrapper que captura qualquer Throwable, dando um tratamento genérico à exceção, mas evitando – dependendo do caso – que a aplicação aborte.
No caso de Threads isso é um pouco mais complicado. Como cada Thread ganha vida própria não há onde colocar a barreira para caso ela dispare uma exceção. Nesse artigo de Eric Bruno, publicado na Dr.Dobbs, ele aborda como o Java nos permite configurar tratadores para exceções ocorridas em Threads. Boa Leitura:
Uncaught Java Thread Exceptions