首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从线程捕获异常?

如何从线程捕获异常?
EN

Stack Overflow用户
提问于 2018-04-02 05:14:12
回答 2查看 0关注 0票数 0

我有Javamain类,在这个类中,我启动了一个新线程,在主线程中,它一直等到线程死掉。在某个时刻,我从线程抛出一个运行时异常,但无法捕获主类中从线程抛出的异常。

以下是代码:

代码语言:txt
复制
public class Test extends Thread
{
  public static void main(String[] args) throws InterruptedException
  {
    Test t = new Test();

    try
    {
      t.start();
      t.join();
    }
    catch(RuntimeException e)
    {
      System.out.println("** RuntimeException from main");
    }

    System.out.println("Main stoped");
  }

  @Override
  public void run()
  {
    try
    {
      while(true)
      {
        System.out.println("** Started");

        sleep(2000);

        throw new RuntimeException("exception from thread");
      }
    }
    catch (RuntimeException e)
    {
      System.out.println("** RuntimeException from thread");

      throw e;
    } 
    catch (InterruptedException e)
    {

    }
  }
}

有人知道为什么吗?

EN

回答 2

Stack Overflow用户

发布于 2018-04-02 13:28:14

Thread.UncaughtExceptionHandler

代码语言:txt
复制
Thread.UncaughtExceptionHandler h = new Thread.UncaughtExceptionHandler() {
    public void uncaughtException(Thread th, Throwable ex) {
        System.out.println("Uncaught exception: " + ex);
    }
};
Thread t = new Thread() {
    public void run() {
        System.out.println("Sleeping ...");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            System.out.println("Interrupted.");
        }
        System.out.println("Throwing exception ...");
        throw new RuntimeException();
    }
};
t.setUncaughtExceptionHandler(h);
t.start();
票数 0
EN

Stack Overflow用户

发布于 2018-04-02 14:50:54

这就解释了线程的状态转换取决于是否发生异常:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档