我正在使用以下内容从主线程创建一个新线程:
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/