我正在创建一些多线程代码,并且我创建了一个创建线程的JobDispatcher类。我希望这个对象处理工作线程中的任何未处理的异常,因此我正在使用
Thread.setUncaughtExceptionHandler(this);
现在,我想测试一下这个功能 - 如何在worker对象的run()方法中生成未处理的异常?
答案 0 :(得分:14)
抛出任何异常。
E.g:
throw new RuntimeException("Testing unhandled exception processing.");
达成:
public class RuntimeTest
{
public static void main(String[] a)
{
Thread t = new Thread()
{
public void run()
{
throw new RuntimeException("Testing unhandled exception processing.");
}
};
t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler()
{
public void uncaughtException(Thread t, Throwable e)
{
System.err.println(t + "; " + e);
}
});
t.start();
}
}
答案 1 :(得分:6)
抛出异常有什么问题:
throw new Exception("This should be unhandled");
在run方法中。当然,没有抓住它。它应该触发你的处理程序。
答案 2 :(得分:6)
您应该抛出一些未经检查的异常。未经检查的异常不需要您的代码来处理它,因此它是一个很好的候选者,可以一直向下调用堆栈。
例如,您可以选择 RuntimeException ,甚至可以选择 AssertionError 之类的内容,如果您希望最小化代码的某些部分捕获异常并在之前处理异常的可能性它到达你的处理程序。
答案 3 :(得分:0)
只需添加此代码即可获得未处理的异常而不会出现lint错误:
int i = 1/0;