Обработчик неперехваченных исключений Java

Обработчик неперехваченных исключений JavaМетод run() потока не может генерировать никаких контролируемых исключений, но может быть прерван неконтролируемым исключением. В этом случае поток уничтожается.

Однако нет конструкции catch, куда может распространиться исключение. Вместо этого непосредственно перед смертью потока исключение передается обработчику неперехваченных исключений.Обработчик должен относиться к классу, реализующему интерфейс Thread.UncaughtExceptionHandler. Этот интерфейс имеет единственный метод:

Начиная с Java SE 5.0, вы можете инсталлировать обработчик в любой поток методом setUncaughtExceptionHandler.

Вы можете также инсталлировать обработчик по умолчанию для всех потоков с помощью статического метода setDefaultUncaughtExceptionHandler() класса Thread.

Заменяющий обработчик может использовать API протоколирования для отправки отчетов о необработанных исключениях в файл протокола.

Если вы не инсталлируете обработчик по умолчанию, то им является null. Однако если вы не инсталлируете обработчик для индивидуального потока, то обработчиком является объект потока ThreadGroup.

Группа потоков — это коллекция потоков, которой можно управлять совместно. По умолчанию все потоки, которые вы создаете, относятся к одной и той же группе потоков, но можно устанавливать и другие группы. Поскольку в Java SE 5.0 появились лучшие средства для операций над коллекциями потоков, вам не нужно использовать группы потоков в ваших собственных программах.

Если ThreadGroup реализует интерфейс Thread.UncaughtExceptionHandler. Его метод uncaughtException() выполняет следующие действия.

  1. Если группа потоков не имеет родителя, вызывается метод uncaughtException() родительской группы.
  2. В противном случае, если метод Thread.getDefaultExceptionHandler возвращает отличный от null обработчик, вызывается этот обработчик.
  3. В противном случае, если Throwable является экземпляром ThreadDeath, то ничего не происходит.
  4. В противном случае имя потока и трассировка стека Throwable печатаются в потоке ошибок System.err.