高并发--卷6--线程组、异常处理

为了更好的管理线程,JAVA中引入了线程组,我们将相同类型的线程放到线程组中。
new Thread(Thread,Runnable);

引例


public class T{
    public static void main(String[] args) throws InterruptedException {
        ThreadGroup tg = new ThreadGroup("我的线程组");
        Thread t1 = new Thread(tg,new ThreadA());
        Thread t2 = new Thread(tg,new ThreadB());
        t1.start();
        t2.start();

        //包括子线程组中活跃的线程数
        System.out.println("线程组中运行的线程数"+ tg.activeCount());
        Thread.sleep(500);
        System.out.println("线程组中运行的线程数"+ tg.activeCount());
    }
}

class ThreadA implements Runnable{
    @Override
    public void run() {
        System.out.println("thread-a runnable");
        System.out.println("thread-a线程属于" + Thread.currentThread().getThreadGroup().getName());
    }
}

class ThreadB implements Runnable{
    @Override
    public void run() {
        System.out.println("thread-b runnable");
        System.out.println("thread-b线程属于" + Thread.currentThread().getThreadGroup().getName());
    }
}

输出结果:
线程组中运行的线程数2
thread-b runnable
thread-a runnable
thread-b线程属于我的线程组
thread-a线程属于我的线程组
线程组中运行的线程数0

三种线程异常处理范围

t.setUncaughtExceptionHandler(UncaughtExceptionHandler) //给t对象单独设置处理规则

Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler) //设置静态处理规则

重写ThreadGroup中的uncaughtException方法。

        //为t1添加一个异常处理规则
        t1.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread t, Throwable e) {
                //t为异常的线程
            }
        });
        //添加一个静态异常处理规则

/*************************************************************/     

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread t, Throwable e) {
                //t为异常的线程
            }
        });

/*******************************************/
class MyThreadGroup extends ThreadGroup{
    public MyThreadGroup(String name) {
        super(name);
    }
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        //t为异常的线程
    }
}

//另一种写法
ThreadGroup tg = new ThreadGroup("我的线程组"){
    @Override
    public void uncaughtException(Thread t,Throwable e){
    //t为异常的线程
    }
};

猜你喜欢

转载自blog.csdn.net/qq_25956141/article/details/81255833