上代码
package com.dq;
public class ThreadTest implements Runnable
{
@Override
public void run()
{
throw new RuntimeException();
}
public static void main(String[] args)
{
ThreadTest task = new ThreadTest();
Thread thread = new Thread(task);
try
{
thread.start();
}
catch (Exception e)
{
System.out.println("捕获到异常");
}
}
}
执行结果为
可以看到并没有执行catch语句块的内容,run不能往上抛异常,自然也就捕获不到
改进
自定义异常捕获器,实现UncaughtExceptionHandler接口
class MyExceptionHandler implements UncaughtExceptionHandler
{
@Override
public void uncaughtException(Thread t, Throwable e)
{
System.out.println("自定义异常处理器处理异常,线程名称" + t.getName() + " 异常:" + e);
}
}
在主线程中设置一下自定义异常处理器
public static void main(String[] args)
{
Thread.setDefaultUncaughtExceptionHandler(new MyExceptionHandler());
ThreadTest task = new ThreadTest();
Thread thread = new Thread(task);
thread.start();
}
改进后执行结果为
这样主线程中没有捕获到的异常就交给了自定义异常处理器