如何访问作为线程的一部分发生的异常信息?

Jam*_*sev 3 java multithreading exception

可能重复:
处理在单独线程中抛出的异常的最佳方法是什么?

当坏事发生时,我的代码抛出一个异常,后来被捕获并处理.

如果所述代码作为线程的一部分运行,public void run()则不会throw Exception.胎面的执行者如何知道抛出的异常?

现在:

 A a = new A();
 try {
    a.doSomething();
 } catch (Exception e) {
    // do something clever
 }
Run Code Online (Sandbox Code Playgroud)

使用线程

 Thread t = new Thread (new A());
 t.start(); // run() calls doSomething()
Run Code Online (Sandbox Code Playgroud)

如果此线程因异常而失败,我怎么知道呢?

Rev*_*nzo 6

您可以通过Thread.setUncaughtExceptionHandler()在线程上设置未捕获的异常处理程序,它将处理代码中未处理的任何异常.

实质上:

t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
  public void uncaughtException(Thread t, Throwable e)() {
    // do whatever
  }
});
Run Code Online (Sandbox Code Playgroud)

此外,如果你想要一个所有线程的处理程序,你可以调用Thread.setDefaultUncaughtExceptionHandler这是一个静态方法,为没有专门为它的线程提供一个处理程序.