在多线程下, 主线程无法catch子线程的异常
所以在多线程的情况下应注意这一点。
话不多说, 直接撸代码,看效果。
private void testStackOOM(){
try{
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try{
int a= 1/0;
}catch (Throwable ee){
System.out.println("Stack invoke depth ");
throw ee;
}
}
});
thread.start();
}
}catch (Throwable e){
System.out.println("Stack invoke depth ");
throw e;
}
这里将子线程的try-catch注释掉, 主线程无法catch到子线程的异常。
这里面的原理是: catch 异常的获取到的是对象的引用。而java的栈空间是线程私有的。故主线程无法catch子线程的异常。
例子很简单。 大神欲喷,请绕行。