Мягкая мебель в гостиную
21.07.2016
Выполнение Java-иотоков завершается естественным образом по достижении конца кода, когда не остается инструкций для выполнения, например в конечной точке тела метода Runnable.run(). Если во время выполнения возникнет неожиданная ошибка, результатом этого может стать непредусмотренное и неконтролируемое исключение. Неконтролируемые исключения являются производными от класса исключения RuntimeException и не требуют обязательной обработки в блоках try/catch, поскольку могут передаваться вверх но стеку вызовов потока и при достижении начальной точки в потоке вызвать его завершение. Чтобы неожиданные ошибки не оставались незамеченными, поток можно связать с обработчиком UncaughtExceptionHandler, который вызывается непосредственно перед завершением потока. Этот обработчик дает приложению шанс завершить поток безопасно и корректно (насколько это возможно) или, по крайней мерс, оставить сообщение об ошибке на сетевом или файловом ресурсе. Возможно вам понадобится мягкая мебель в гостиную.
Интерфейс UncaughtExceptionHandler используется путём реализации метода uncaughtExceptionf) и связывания его с потоком. Если поток завершается из-за неожиданной ошибки, реализация этого метода вызывается до того, как поток будет завершён. Подключить UncaughtExceptionHandler можно сразу ко всем потокам или к определенному потоку, в классе Thread:
Глобальный обработчик потоков
static void setDefaultUncaughtExceptionHandler(
Thread.UncaughtExceptionHandler handler );
Локальный обработчик потока
void setUncaughtExceptionHandler( Thread.UncaughtExceptionHandler handler );
Если к потоку подключены оба обработчика - глобальный и локальный, локальный обработчик будет иметь приоритет перед глобальным, то есть при неожиданных ошибках всегда будет вызываться локальный обработчик, а не глобальный.
|