在try catch中开启新的线程,不能捕获线程里面的异常

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ddnosh/article/details/84253000

近期在review代码的时候发现,有些人为了图方便,直接在代码引用的最外层放上一个try catch,以为可以捕获一切异常,降低崩溃率。
事实上,如果try的是新开启的一个线程,那么这个线程里面出现的异常是catch不到。也就是说在A线程中new B线程,B线程中出现的crash跟A线程无关,A也catch不到。


public class TheadExceptionTest {

	public static void main(String[] args) {
		try {
			new Thread(new Runnable() {
				@Override
				public void run() {
					int i = 1 / 0;
				}
			}).start();
		} catch (Exception e) {
		}
	}

}

这样的try是不不到异常的。需要在Thread里面加上try catch。

public class TheadExceptionTest {

	public static void main(String[] args) {
		try {
			new Thread(new Runnable() {
				@Override
				public void run() {
					try {
						int i = 1 / 0;
					} catch (Exception e) {
						System.out.println("cannot / by zero!!!");
					}
				}
			}).start();
		} catch (Exception e) {
		}
	}

}

猜你喜欢

转载自blog.csdn.net/ddnosh/article/details/84253000