run方法抛出异常未被铺货(Uncaught Exception),那么随着run方法的退出,相应的线程也会提前终止。对于线程的这种异常终止,我们如何得知并做出可能的补救动作,例如重新创建并启动一个替代线程。UncaughtExceptionHandler接口实现了对线程的异常信息的监控和处理uncaughtException(Thread a, Throwable e)方法,在这里我们可以将线程抛出的异常信息记录到日志中,或者开启一个替代线程继续提供服务12345678910111213141516171819202122232425262728293031323334353637383940 | public class ThreadTest { public static void main(String[] args) { ErrHandler handle = null; ThreadA a = null; a = new ThreadA(); //创建线程对象 handle = new ErrHandler(); //创建UncaughtExceptionHandler a.setUncaughtExceptionHandler((UncaughtExceptionHandler) handle); a.start(); //启动 } } /** * 自定义的一个UncaughtExceptionHandler */class ErrHandler implements UncaughtExceptionHandler { /** * 这里可以做任何针对异常的处理,比如记录日志等等 * @param a : 抛出异常的线程对象 * @param e : 抛出的异常信息,可以获取异常信息 */ public void uncaughtException(Thread a, Throwable e) { //做一些日志管理 System.out.println("This is:" + a.getName() + ",Message:" + e.getMessage()); //开启一个另外的线程提供服务 System.out.println("现在执行另外一个替代线程提供服务......"); }} /** * 拥有UncaughtExceptionHandler的线程 */class ThreadA extends Thread { public void run() { double i = 12 / 0;// 抛出异常的地方 }} |
|---|