Если исключение поймано и обработано кодом, выполняющимся в этом потоке, оно будет обработано, однако записана логика блока catch
.В оставшейся части этого ответа я буду предполагать, что вы говорите о необработанных исключениях.
Необработанное исключение приведет к завершению потока.Когда он всплывает на вершину Thread.run()
, он будет обработан UncaughtExceptionHandler .По умолчанию это просто выведет трассировку стека на консоль.Сам поток завершится в этот момент - он все равно не может продолжаться, потому что его метод run()
завершен.
Так что, если вы хотите, чтобы исключение было повторно вызвано в вашем основном потоке, вы можете определитьUncaughtExceptionHandler, который сделает это (это очень простой интерфейс), а затем вызовет Thread.setUncaughtExceptionHandler
в порожденном потоке после его создания, передавая ваш пользовательский обработчик исключений.
Единственная потенциально сложная часть о написанииобработчик определяет, где и как именно вы собираетесь «вставить» объект throwable в ваш основной поток.Это не совсем очевидно, если ваш поток отключен от выполнения каких-либо других действий, и будет сильно зависеть от того, как вы разработали свое приложение и как будет выглядеть его параллельная поддержка.
(Если, с другой стороны,ваш основной поток просто ожидает запуска другого потока, тогда это становится проще, но в этом случае, возможно, ваш основной поток должен отправить задачу в поток ExecutorService
и заблокировать в Future
, который будет обрабатывать всеэтой проводки / жизненного цикла для вас?)