存在于线程的异常有一个重要的特性——线程的异常必须在run方法里被捕获处理。
如果线程的异常逃出run方法,除非采取特殊手段捕获此异常,要不异常将不能被
捕获。
观察下面的代码
run方法内将异常抛出,流到控制台。此程序将抛出异常。
如果我们加入try-catch代码块,会发生什么呢?
事实上,即使加上try-catch语句,仍然无法捕获处理从线程run方法里逃出来的异常。
为了处理这种潜在的”危险“我们可以利用Thread.UncaughtExceptionHandle(Java SE5)接口
来处理异常在线程里被抛出的情况。此接口可以为每一个线程对象上附上一个
异常处理器——Thread.UncaughtExceptionHandle.uncaughtException()。此处理器会在当
你的线程因出线异常却未在run内被捕获时而不得不终止线程时被调用。
为了阐述Thread.UncaughtExceptionHandle的工作方式,我们将用一段代码来试着解释工作
原理。观察下面代码:
输出为:
我们可以看到,在线程的run方法里未被捕获到的异常在
Thread.UncaughtExceptionHandle.uncaughtException()里被捕获到了。这样,
便可以把逃出run方法的异常捕获并作出相应的处理了。
最后,需要注意的是:此方法在Java SE5后才被加入的新接口。