线程组

线程组

java使用ThreadGroup来表示线程,它可以对一批线程进行分类管理,Java支持程序员直接对线程组进行管理控制。对线程组的控制相当于控制了这批线程。
一旦某个线程加入到某个线程组之后,该线程就一直属于该线程组,直到该线程死亡线程,线程运用途中不能改变它所属的线程组。
在这里插入图片描述
Thread类提供了以下构造器来设置新创建的线程属于哪个线程组
Thread(ThreadGroup group,Runnable targer):以targer的run()方法作为线程执行体创建新线程属于group线程组

Thread(ThreadGroup group,Runnable targer,String name):name线程名
Thread(ThreadGroup group,String name)
因为中途不可以改变线程所属的线程组,所以没有一个方法来改变线程所属的线程组,但提供了得到线程所属线程组的方法getThreadGroup()
ThreadGroup来提供了构造器创建实例
ThreadGroup(String name):name:线程组的名字
ThreadGroup(ThreadGroup group,String name):group父线程的名字
获取线程组的名字:ThreadGroup的getName()获取
ThreadGroup提供里几个常用方法
int activeCount():返回线程组中活动的线程数量
interrupt():中断线程组的所有线程
isDaemon():判断线程组是否为后台线程组
setDaemon(boolean daemon):设置线程组为后台线程组
setMaxPriority(int pri):设置线程组的优先级

class A extends Thread{
    public A(String name){
        super(name);
    }
    public A(ThreadGroup group,String name){
        super(group,name);
    }

    @Override
    public void run() {
        for(int i=0;i<5;i++){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(getName()+Thread.currentThread().getThreadGroup().getName()+"线程的i变量"+i);
        }
    }
}
public class Demo01{
    public static void main(String[] args) {
        //获取线程的所有线程组,这只所有默认的线程组
        ThreadGroup group=Thread.currentThread().getThreadGroup();
        System.out.println(group.getName());
        System.out.println("主线程是否为后台线程"+group.isDaemon());
        new A("主线程的线程").start();
        //设置新的线程组
        ThreadGroup group1=new ThreadGroup("性线程组");
        //设置为后台线程
        group1.setDaemon(true);
        A a=new A(group1,"group1的线程甲");
        a.start();
        new A(group1,"group1的线程乙").start();
        System.out.println("是否为后台线程"+group1.isDaemon());
    }
}

异常处理
void uncaughtException(Thread t,Throwable e):ThreadGroup类定义的一个方法,该方法可以处理线程组中的仍以线程锁抛出的未处理异常,
Java5开始加强了线程异常处理,如果线程执行时抛出了一个未知处理异常,JVM在结束该线程之前会查找是否有对应的Thread.uncaughtExceptionHandler对象,如果有调用void uncaughtException(Thread t,Throwable e)方法处理异常
Thread类提供了如下方法来设置异常处理器
static setDefaughtuncaughtExceptionHandler(Thread.uncaughtExceptionHandler eh):为该线程类的所有线程实例设置默认为异常处理器
setDefaughtuncaughtException(Thread.uncaughtExceptionHandler eh):为指定的线程实例设置异常处理器。
ThreadGroup实现了Thread.uncaughtExceptionHandler接口

public class demo02 {
    public static void main(String[] args) {
        Thread.currentThread().setUncaughtExceptionHandler(new MyEXHandler());
        int a=5/0;
        System.out.println("线程结束");
    }
}
class MyEXHandler implements Thread.UncaughtExceptionHandler{
    //实现UncaughtExceptionHandler中的方法,该方法将处理线程未处理的异常
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        System.out.println(t+"线程出现了异常"+e);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值