A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王松朝 金牌黑马   /  2011-7-20 23:35  /  2947 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在try中写一个一直往外抛异常的线程,用catch(Exception e)捕捉不到抛出的异常,书上说要用特殊的方法才行,是什么特殊的方法?

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 晚上散分咯!

查看全部评分

1 个回复

倒序浏览
黑马网友  发表于 2011-7-21 00:39:30
沙发
说到异常:异常大体可分为checked异常,错误(Error)、和运行期异常(RuntimeException)。首先明确了一点,线程代码不能抛出任何checked异常。所有的线程中的checked异常都只能被线程本身消化掉。这也符合线程作为独立执行片段,需要对自己负责的设计理念。
除此以外,线程代码中是可以抛出错误(Error)和运行级别异常(RuntimeException).但是错误异常一般都是交给vm去处理,这里我们可以将其忽略。而RuntimeException确是比较正常的,如果在运行过程中满足了某种条件导致线程必须中断,可以选择使用抛出运行级别异常来处理.
      处理方法:通过ThreadGroup的uncaughtException方法。当线程抛出uncaughtException的时候,JVM会调用ThreadGroup的此方法。[code]public class ApplicationLoader extends ThreadGroup {
        private ApplicationLoader() {
                super("ApplicationLoader");
        }

        public static void main(String[] args) {

                Runnable appStarter = new Runnable() {
                        public void run() {
                                // invoke your application (i.e.MySystem.main(args)
                                throw new NullPointerException(); // example, throw a runtime
                        }
                };

                new Thread(new ApplicationLoader(), appStarter).start();
        }

        // We overload this method from our parent
        // ThreadGroup , which will make sure that it
        // gets called when it needs to be. This is
        // where the magic occurs.
        public void uncaughtException(Thread thread, Throwable exception) {
                // Handle the error/exception.
                // Typical operations might be displaying a
                // useful dialog, writing to an event log, etc.

                exception.printStackTrace();// example, print stack trace
        }
}[/code]以上代码就可以实现线程的异常捕捉。每个Thread都会有一个ThreadGroup对象,可以通过Thread.getThreadGroup()方法得到,此方法提供了上述默认的uncaught异常处理方法。
虽然可以处理,不过还是强调一点:线程的问题应该线程自己本身来解决,而不要委托到外部!

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 代码整齐,加分。

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马