java - 子线程异常

标签 java multithreading

我正在使用以下内容从主线程创建一个新线程:

public static void main(String[] args) {

        try {
            new TestThread().start();
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("Inside main");

    }

并抛出异常。我也可以在主线程中捕获它。但是根据 article

这不应该是这样吗?

编辑:

public class TestThread extends Thread {

@Override
public void run() {

throw new RuntimeException();
}

 }

异常跟踪

Inside main
Exception in thread "Thread-0" java.lang.RuntimeException
    at TestThread.run(TestThread.java:8)

最佳答案

线程的 run() 方法抛出的异常不会被主线程捕获,而是由 JVM 处理。
如果您想管理这种情况,您应该使用Thread.setUncaughtExceptionHandler方法。

类似这样的事情:

class MyHandler implements Thread.UncaughtExceptionHandler
{
  @Override
  public void uncaughtException(Thread t, Throwable e)
  {
    System.out.println("Caught exception " + e.getMessage());
    e.printStackTrace();
  }
}

class MyThread extends Thread
{
  public MyThread()
  {
    setUncaughtExceptionHandler(new MyHandler());
  }

  @Override
  public void run()
  {
    throw new RuntimeException("ciao");
  }
}

关于java - 子线程异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59896473/

相关文章:

java - 在 Jar 文件中获取 xml 文件

Java JApplet 在移动旧矩形后不会将其删除

java - 业务逻辑的同步实现

python - 如何使用 'with' 语句对 Python 锁进行单元测试?

java - 将 HDFS 挂载到本地目录失败

java - Maven + Jboss + SmartGWT 应用程序

c++ - 如何在线程和 Waitforsingleobject() 的等价物之间进行通信

c++ pthreads和struct的损坏数据

python - 在 Python 中使用多线程计算阶乘

java - 坚持后如何填充完整的实体?