Java线程组

        多线程中,为了方便管理一批线程,我们使用ThreadGroup来表示线程组,通过它对一批线程进行分类管理 。(默认情况下,A线程创建的线程B,B线程是属于A线程的线程组的。)


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

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

        Thread(ThreadGroup group,Runnable target,String name):以target的run()方法为线程执行提创建新线程,并且输入group线程组,新线程名字为name。

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

ThreadGroup类的简单构造器以及几个常用方法:

        ThreadGroup(String name):创建名为name的新线程组。

        ThreadGroup(ThreadGroup parent,String name):创建指定父线程组,名为name的新线程组。

        int activeCount():返回此线程组中活动线程的数目。

        interrupt():中断此线程组中所有的线程。

        isDaemon():判断此线程组是否为后台线程。

        setDaemon(boolean daemon):设置线程组为后台线程(当后台线程组中最后一个线程执行完成活着最后一个线程被销毁,后台线程将自动销毁)。

        setMaxPriority(int prio):设置线程组的最高优先级。



我们来用简单的代码例子说明下:

线程测试类:

Java线程组_第1张图片

测试线程组:


Java线程组_第2张图片

运行结果:



注意:不要把后台线程组和后台线程(守护线程)混为一谈,后台线程组的特性是最后一个线程执行完或最后一个线程被销毁时,后台线程组自动销毁,线程组只是为了统一管理线程的一个方式!



通过线程组处理异常

        ThreadGroup类中定义了一个 void uncaughtException(Thread t, Throwable e) 方法(t代表抛出异常的线程,e代表抛出的异常),该方法处理此线程组里所有线程抛出的未处理的异常。

代码说明:

定义一个线程:

Java线程组_第3张图片

我们来重写下线程组中的void uncaughtException(Thread t, Throwable e)方法:

Java线程组_第4张图片

运行:



        我们知道通常捕获抛出的异常都是用try…catch来实现的,但是多线程中,捕获抛出的异常机制都是一样的,于是每个线程我们都这样写一遍的话便大大增长了代码的臃肿,用线程组统一处理,方便我们统一处理!




-------------上一节“Java-使用管道流实现线程通信”---------------

-------------下一节“Java-Callable和Future”-----------------------

你可能感兴趣的:(Java线程组)