Java并发编程示例(十):线程组
简介
Java提供了一种称为线程组(Thread Group)的机制来方便地管理一批线程,特别是当多个线程彼此之间存在着逻辑上的相关性时。一个线程组可以包含多个线程,也可以包含多个线程组。
线程组的基本操作
- 创建线程组:可以通过ThreadGroup类的构造方法来创建一个新的线程组。
ThreadGroup threadGroup = new ThreadGroup(String name);
- 将线程添加到线程组中:可以通过Thread类的构造方法或setThreadGroup(ThreadGroup group)方法来将一个线程实例添加到某个线程组中。
Thread thread = new Thread(ThreadGroup group, Runnable target, String name);
或
Thread thread = new Thread(Runnable target);
thread.setThreadGroup(ThreadGroup group);
- 统计线程组信息:可以使用线程组的常用方法来获取线程组的有关信息。
常用方法:
* int activeCount():返回当前线程组及其子组中活动线程的数目。
* int activeGroupCount():返回当前线程组及其子组中活动线程组的数目。
* void list():向标准输出设备输出关于当前线程组及其子组的信息,输出的信息包括了线程组名称、在该组中的线程数目、子组的数目等。
示例1:统计线程组信息
public class ThreadGroupDemo1 {
public static void main(String[] args) {
ThreadGroup myGroup = new ThreadGroup("MyGroup");
Thread thread1 = new Thread(myGroup, new MyRunnable(), "Thread 1");
Thread thread2 = new Thread(myGroup, new MyRunnable(), "Thread 2");
Thread thread3 = new Thread(myGroup, new MyRunnable(), "Thread 3");
Thread thread4 = new Thread(myGroup, new MyRunnable(), "Thread 4");
thread1.start();
thread2.start();
thread3.start();
thread4.start();
System.out.printf("我的线程组中线程数目:%d\n", myGroup.activeCount());
System.out.printf("我的线程组中活动的线程组数目:%d\n", myGroup.activeGroupCount());
myGroup.list();
}
private static class MyRunnable implements Runnable {
@Override
public void run() {
System.out.printf("%s 正在运行...\n", Thread.currentThread().getName());
}
}
}
在示例中,首先创建一个线程组MyGroup,然后创建了4个线程并将它们添加到MyGroup中。执行完线程组的创建和线程的启动之后,输出线程组的信息,包括线程组中的线程数目、活动的线程组数目、线程组的结构信息等。
输出结果如下:
我的线程组中线程数目:4
我的线程组中活动的线程组数目:1
java.lang.ThreadGroup[name=MyGroup,maxpri=10]
Thread[Thread 1,5,MyGroup]
Thread[Thread 4,5,MyGroup]
Thread[Thread 2,5,MyGroup]
Thread[Thread 3,5,MyGroup]
示例2:线程组嵌套
线程组可以有父子关系。在 java.lang.ThreadGroup 类中,提供了一个构造函数:
ThreadGroup(String name, ThreadGroup parent)
通过这个构造函数可以构造一个 ThreadGroup 对象,并指定它的父 ThreadGroup 对象,构造函数的第二个参数为父 ThreadGroup 对象。
示例代码如下:
public class ThreadGroupDemo2 {
public static void main(String[] args) {
ThreadGroup parentGroup = new ThreadGroup("ParentGroup");
ThreadGroup childGroup = new ThreadGroup(parentGroup, "ChildGroup");
Thread thread1 = new Thread(parentGroup, new MyRunnable(), "Thread 1 in ParentGroup");
Thread thread2 = new Thread(childGroup, new MyRunnable(), "Thread 2 in ChildGroup");
thread1.start();
thread2.start();
System.out.printf("parentGroup中的线程数目:%d\n", parentGroup.activeCount());
System.out.printf("childGroup中的线程数目:%d\n", childGroup.activeCount());
System.out.printf("childGroup的父线程组:%s\n", childGroup.getParent().getName());
}
private static class MyRunnable implements Runnable {
@Override
public void run() {
System.out.printf("%s 正在运行...\n", Thread.currentThread().getName());
}
}
}
在示例中,首先创建一个父线程组ParentGroup,再创建一个子线程组ChildGroup并将其作为 ParentGroup 的子线程组。然后创建两个线程,将一个线程添加到 ParentGroup 中,将另一个线程添加到 ChildGroup 中。执行完线程组和线程创建之后,输出 ParentGroup 中线程数目、ChildGroup 中线程数目和 ChildGroup 的父线程组名称。
输出结果如下:
Thread 1 in ParentGroup 正在运行...
Thread 2 in ChildGroup 正在运行...
parentGroup中的线程数目:1
childGroup中的线程数目:1
childGroup的父线程组:ParentGroup
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java并发编程示例(十):线程组 - Python技术站