您的位置:首页 > 编程语言 > Java开发

java 多线程中的异常处理

2015-08-17 15:04 393 查看
1、java多线程中,最近线程会抛异常,但是所以自然的想着通过try catche来捕获异常:

try {
thread1.start();
} catch (Exception e) {
System.out.println("thread1 异常被捕获");
}


抛异常代码段为:

public void run() {

synchronized (lock) {
int[] a = {1};
System.out.println("this is thread One");
System.out.println(a[2]);
}


后来发现异常在线程里面抛出以后我们截取不到,最后才反应过来 自己是二逼呀。

当线程抛出异常以后,线程就会终结,而对于主线程和其他线程完全不受影响,且完全感知不到某个线程抛出的异常(也是说完全无法catch到这个异常)。JVM的这种设计源自于这样一种理念:“线程是独立执行的代码片断,线程的问题应该由线程自己来解决,而不要委托到外部。”所以我们不能够直接捕获异常。

解决方法为:在执行线程的时候,传递一个List用于保存当前线程的异常。然后当线程执行完毕以后就将这个list返回,这样就可以获取到线程的异常。或者使用java提供的线程异常回调函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: