多线程中,为了方便管理一批线程,我们使用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):设置线程组的最高优先级。
我们来用简单的代码例子说明下:
线程测试类:
测试线程组:
运行结果:
注意:不要把后台线程组和后台线程(守护线程)混为一谈,后台线程组的特性是最后一个线程执行完或最后一个线程被销毁时,后台线程组自动销毁,线程组只是为了统一管理线程的一个方式!
通过线程组处理异常
ThreadGroup类中定义了一个 void uncaughtException(Thread t, Throwable e) 方法(t代表抛出异常的线程,e代表抛出的异常),该方法处理此线程组里所有线程抛出的未处理的异常。
代码说明:
定义一个线程:
我们来重写下线程组中的void uncaughtException(Thread t, Throwable e)方法:
运行:
我们知道通常捕获抛出的异常都是用try…catch来实现的,但是多线程中,捕获抛出的异常机制都是一样的,于是每个线程我们都这样写一遍的话便大大增长了代码的臃肿,用线程组统一处理,方便我们统一处理!
-------------下一节“Java-Callable和Future”-----------------------
网友评论