Хорошо, если поток работает одновременно с вашим кодом, как он может перехватить исключение? Как только вы вызываете start (), поток запускается (ну, возможно, в какой-то момент после этого вызова), и остальная часть программы перемещается дальше ловушки.
Скажем, например, поток создается и запускается методом, называемым "foo". Как только вы начинаете, метод foo достигает конца и возвращается к тому, что вызвало его. Это тогда вызывает метод "бар". В этот момент запланирован запуск нового потока, поэтому метод "bar" приостановлен, а метод запуска в потоке выполнен. Теперь исключение случается. Программа очень далека от улова, который вы пытаетесь получить. Даже если бы эта часть программы не спала.