Иногда вам просто нужно поймать Throwable, например. при написании очереди диспетчера, которая отправляет общие элементы и нуждается в восстановлении от любых ошибок (упомянутый диспетчер регистрирует все обнаруженные исключения, но молча, а затем выполнение продолжается по другим элементам).
Одна из лучших практик, о которых я могу думать, заключается в том, чтобы всегда реконструировать исключение, если это InterruptedException, потому что это означает, что кто-то прервал мой поток и хочет его убить.
Еще одно предложение (полученное из комментария, а не ответ) состоит в том, чтобы всегда реконструировать ThreadDeath
Какие-либо другие рекомендации?