为了更好的管理线程,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为异常的线程
}
};