Я создаю некоторый многопоточный код, и я создал класс JobDispatcher, который создает потоки. Я хочу этот объект обработать любые необработанные исключения в рабочих потоках, и таким образом, я использую
Thread.setUncaughtExceptionHandler(this);
Теперь, я хотел бы протестировать эту функциональность - как я могу генерировать необработанное исключение в выполнении () метод моего объекта рабочего?
Просто вызовите любое исключение.
Например:
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();
}
}
Вы должны бросить какое-нибудь непроверенное исключение. Непроверенное исключение не требует, чтобы ваш код его обрабатывал, и поэтому является хорошим кандидатом на то, чтобы пройти весь путь вниз по стеку вызовов.
Вы можете выбрать RuntimeException, например, или даже что-то вроде AssertionError, если хотите минимизировать вероятность того, что какая-то часть кода поймает исключение и обработает его до того, как оно достигнет вашего обработчика.
В чем проблема с простой генерацией исключения:
throw new Exception("This should be unhandled");
Внутри вашего метода выполнения. И, конечно, не уловил. Это должно вызвать ваш обработчик.