首先得明确线程中的run()方法是不能抛出任何checked异常,所以该类异常只能被线程自己捕获,自己内部消化,因为线程本身就是一个独立片段。
但是,给某个thread设置一个UncaughtExceptionHandler,可以确保在该线程出现异常时能通过回调UncaughtExceptionHandler接口的
void uncaughtException(Thread t, Throwable e);
方法来处理异常,在这里我们可以处理在线程内部未捕获到的异常,可以抛出错误码。
public class ThreadException { public static void main(String[] args) { Thread t = new Thread(() -> { try { T(3000); } catch (InterruptedException e) { e.printStackTrace(); } Sy(10 / 0); }); t.start(); t.setUncaughtExceptionHandler((t1, e) -> { Sy(e); Sy(t1); }); } }
java.lang.ArithmeticException: / by zero Thread[Thread-0,5,main]