• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
风吹花落泪如雨
博客园    首页    新随笔    联系   管理    订阅  订阅

JAVA多线程(三)-----线程组、线程池和线程相关类

一、线程组和未处理的异常

Thread类提供了如下几个构造器来设置新创建的线程属于哪个线程组:

Thread(ThreadGroup group,Runnable target):以target的run()方法作为线程执行体创建新线程,属于group线程组

Thread(ThreadGroup group,Runnable target,String Name):以target的run()方法作为线程执行体创建新线程,属于group线程组,线程名为name

Thread(ThreadGroup group,String Name):创建新线程,线程名为name,属于group数组

中途不可改变线程所属线程组

ThreadGroup类提供了如下两个简单的构造器来创建实例:

ThreadGroup(String name):以指定的线程组名字来创建新的线程组

 

ThreadGroup(ThreadGroup parent,String name):以指定的线程组名字,父线程组来创建新的线程组

public class MyThread extends Thread{
    //提供指定线程名的构造器
    public MyThread(String name) {
        super(name);
    }
    //提供指定线程名、线程组的构造器
    public MyThread(ThreadGroup group, String name) {
        super(group,name);
    }
    public void run() {
        for(int i = 0; i < 20; i++) {
            System.out.println(getName() + " 线程的i变量" + i);
        }
    }
    public static void main(String[] args) {
        //获取主线程所在的线程组,这是所有线程默认的线程组
        ThreadGroup mainGroup = Thread.currentThread().getThreadGroup();
        System.out.println("主线程组的名字:" + mainGroup.getName());
        System.out.println("主线程组是否是后台线程组" + mainGroup.isDaemon());
        new MyThread("主线程的线程").start();
        ThreadGroup tg = new ThreadGroup("新线程组");
        tg.setDaemon(true);
        System.out.println("tg线程组是否是后台线程组" + tg.isDaemon());
        MyThread tt = new MyThread(tg,"tg组的线程甲");
        tt.start();
        new MyThread(tg,"tg组的线程乙").start();
    }
}

ThreadGroup内还定义了一个很有用的方法,用于处理该线程组内的任意线程所抛出的未处理异常

void uncaughtException(Thread t,Throwable e)

如果线程执行过程中抛出了一个未处理异常,JVM在结束线程之前会自动查找是否有对应的Thread.UncaughtExceptionHandler对象,并调用该对象的uncaughtException(Thread t,Throwable e)方法来处理该异常

class MyExHandler implements Thread.UncaughtExceptionHandler{
    public void uncaughtException(Thread t,Throwable e) {
        System.out.println(t + "线程出现了异常“:" + e);
    }
}
public class ExHandler {

    public static void main(String[] args) {
        Thread.currentThread().setUncaughtExceptionHandler(new MyExHandler());
        int a = 5/0;
        System.out.println("程序正常结束!");
    }
}

 

二、线程池

三、线程相关类

 

posted @ 2018-08-22 11:31  风吹花落泪如雨  阅读(218)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3