public class ThreadHandler {
private volatile static boolean flag = false;
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(()->{throw new NullPointerException();},"threadHandler");
Thread.UncaughtExceptionHandler handler = (thread,e)->{
flag = true;
System.out.println("threadhandler:"+e);
};
t.setUncaughtExceptionHandler(handler);
t.start();
t.join();
if(flag){
System.out.println(true);
}else {
System.out.println(false);
}
System.out.println("===main===");
}
}
输出:
threadhandler:java.lang.NullPointerException
true
===main===
可以看到,子线程报NPE异常,flag变为true,在main线程中可以打印出来,则子线程异常通知到主线程