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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨长川 中级黑马   /  2013-3-23 15:10  /  1476 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨长川 于 2013-3-24 16:25 编辑

我知道线程组ThreadGroup中有一个uncaughtException()方法。但是下面代码还是不很明白,谁能帮我解释一下,谢谢。
  1. package onlyfun.caterpillar;

  2. import java.io.*;

  3. public class ThreadGroupDemo {
  4.     public static void main(String[] args) {
  5.         ThreadGroup threadGroup1 =
  6.         // 这是匿名类写法
  7.             new ThreadGroup("group1") {
  8.                 // 继承ThreadGroup并重新定义以下方法
  9.                 // 在线程成员丢出unchecked exception
  10.                 // 会执行此方法
  11.                 public void uncaughtException(Thread t, Throwable e) {
  12.                     System.out.println(t.getName() + ": "
  13.                              + e.getMessage());
  14.                 }
  15.             };
  16.         
  17.         // 这是匿名类写法
  18.         Thread thread1 =
  19.             // 这个线程是threadGroup1的一员
  20.             new Thread(threadGroup1,
  21.               new Runnable() {
  22.                 public void run() {
  23.                     // 丢出unchecked异常
  24.                     throw new RuntimeException("测试异常");
  25.                 }
  26.             });
  27.      
  28.         thread1.start();
  29.     }
  30. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

2 个回复

倒序浏览
//1.定义好一个线程组,所有里面的线程,都要受其管理
                        ThreadGroup threadGroup1 = new ThreadGroup("group1") {
                        /*2.这个方法在api中的定义为:当此线程组中的线程因为一个未捕获的异常而停止,并且线程没有安装特定 Thread.UncaughtExceptionHandler 时,
                        由 Java Virtual Machine 调用此方法。
*/
                        public void uncaughtException(Thread t, Throwable e) {
                                //3.那么子类抛出异常,且未被手动捕获,就会执行这句代码
                                System.out.println(t.getName() + ": " + e.getMessage());
                        }
                };
                //4.这里用threadGroup1作为构造定义一个新线程,那么这个线程也就受threadGroup1的管理,一旦抛出异常
                Thread thread1 =new Thread(threadGroup1, new Runnable() {
                        public void run() {
                                /*5.线程执行,就会抛出这个异常,这个异常是运行时异常且没有手动捕获,那么就什么执行threadGroup1定义好的uncaughtException
                                 从而将这个线异常信息打印出来

                                 */
                                throw new RuntimeException("测试异常");
                        }
                });

                thread1.start();
回复 使用道具 举报
lucy198921 发表于 2013-3-24 11:51
//1.定义好一个线程组,所有里面的线程,都要受其管理
                        ThreadGroup threadGroup1 =  ...

学习了 ,我怎么没有在基础里 见到这个知识点, 是大大在课外的收获?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马