ThreadGroup线程组表示一个线程的集合。此外,线程组也可以包含其他线程组。
线程组构成一棵树,在树中,除了初始线程组外,每个线程组都有一个父线程组。
允许线程访问有关自己的线程组的信息,但是不允许它访问有关其线程组的父线程组或其他任何线程组的信息。
构造方法
public ThreadGroup(String name)
构造一个新线程组。新线程组的父线程组是目前正在运行线程的线程组。
不使用任何参数调用父线程组的 checkAccess 方法;这可能导致一个安全性异常。
参数:
name - 新线程组的名称。
抛出:
SecurityException - 如果当前线程不能在指定的线程组中创建线程。
public ThreadGroup(ThreadGroup parent,String name)
创建一个新线程组。新线程组的父线程组是指定的线程组。
不使用任何参数调用父线程组的 checkAccess 方法;这可能导致一个安全性异常。
参数:
parent - 父线程组。
name - 新线程组的名称。
抛出:
NullPointerException - 如果线程组参数为 null。
SecurityException - 如果当前线程不能在指定的线程组中创建线程。
在Java中每个线程都属于某个线程组(ThreadGroup)。
例如,如果在main()中产生一个线程,则这个线程属于main线程组(其名字为"main")管理的一员,您可以使用下面的指令来获得目前线程所属的线程组名称:
Thread.currentThread().getThreadGroup().getName();
每一个线程产生时,都会被归入某个线程组,视线程是在哪个线程组中产生而定。如果没有指定,则归入产生该子线程的线程的线程组中。
您也可以自行指定线程组,线程一旦归入某个组,就无法更换组。
java.lang.ThreadGroup类正如其名,可以统一管理整个线程组中的线程,您可以使用以下方式来产生线程组,而且一并指定其线程组:
ThreadGroup threadGroup1 = new ThreadGroup("group1");
ThreadGroup threadGroup2 = new ThreadGroup("group2");
Thread thread1 =new Thread(threadGroup1, "group1's member");
Thread thread2 =new Thread(threadGroup2, "group2's member");
ThreadGroup中的某些方法,可以对所有的线程产生作用,例如interrupt()方法可以interrupt线程组中所有的线程,
setMaxPriority()方法可以设置线程组中线程所能拥有的最高优先权(本来就拥有更高优先权的线程不受影响)。
如果您想要一次获得线程组中所有的线程来进行某种操作,可以使用enumerate()方法,例如:
Thread[] threads = new Thread[threadGroup1.activeCount()];
threadGroup1.enumerate(threads);
activeCount()方法获得线程组中正在运行的线程数量,enumerate()方法要传入一个Thread数组,
它将线程对象设置到每个数组字段中,然后就可以通过数组索引来操作这些线程。
ThreadGroup中有一个uncaughtException()方法。当线程组中某个线程发生Unchecked exception异常时,
由执行环境调用此方法进行相关处理,如果有必要,您可以重新定义此方法,直接使用范例15.9来示范如何实现。
范例1
ThreadGroupDemo.java文件
package onlyfun.caterpillar;
import java.io.*;
public class ThreadGroupDemo {
public static void main(String[] args) {
ThreadGroup threadGroup1 =
// 这是匿名类写法
new ThreadGroup("group1") {
// 继承ThreadGroup并重新定义以下方法
// 在线程成员抛出unchecked exception
// 会执行此方法
public void uncaughtException(Thread t, Throwable e) {
System.out.println(t.getName() + ": "
+ e.getMessage());
}
};
// 这是匿名类写法
Thread thread1 =
// 这个线程是threadGroup1的一员
new Thread(threadGroup1,
new Runnable() {
public void run() {
// 抛出unchecked异常
throw new RuntimeException("测试异常");
}
});
thread1.start();
}
}
在uncaughtException()方法的参数中,第一个参数可以获得发生异常的线程实例,而第二个参数可以获得异常对象,
范例中显示了线程的名称及异常信息,结果如下所示:
Thread-0: 测试异常
在J2SE 5.0之前,如果要统一处理某些线程的Unchecked Exception,可以使用ThreadGroup来管理。
在继承ThreadGroup之后重新定义其uncaughtException()方法,就如范例1所示。在J2SE 5.0之后,就不用这么麻烦,
可以让异常处理类使用Thread.UncaughtExceptionHandler接口,并实现其 uncaughtException()方法,
例如可以改写范例1,首先定义一个类让其实现 Thread.UncaughtExceptionHandler接口。
范例2
ThreadExceptionHandler.java文件
package onlyfun.caterpillar;
public class ThreadExceptionHandler
implements Thread.UncaughtExceptionHandler {
public void uncaughtException(Thread t, Throwable e) {
System.out.println(t.getName() + ": "
+ e.getMessage());
}
}
接着范例1主流程可以改写为范例3。
范例3 ThreadGroupDemo2.java
package onlyfun.caterpillar;
import java.io.*;
public class ThreadGroupDemo2 {
public static void main(String[] args) {
// 建立异常处理者
ThreadExceptionHandler handler =
new ThreadExceptionHandler();
ThreadGroup threadGroup1 = new ThreadGroup("group1");
// 这是匿名类写法
Thread thread1 =
// 这个线程是threadGroup1的一员
new Thread(threadGroup1,
new Runnable() {
public void run() {
// 抛出unchecked异常
throw new RuntimeException("测试异常");
}
});
// 设置异常处理者
thread1.setUncaughtExceptionHandler(handler);
thread1.start();
}
}
需要注意的函数:
public final void checkAccess()
确定当前运行的线程是否有权修改此线程组。
如果有安全管理器,则用此线程组作为其参数调用 checkAccess 方法。结果可能是抛出一个 SecurityException。
抛出:
SecurityException - 如果不允许当前线程访问此线程组。
注意:它返回的居然是void,而不是boolean.其实如果当前运行的线程没有权修改此线程组,则抛出一个 SecurityException。
否则不抛出。
public int enumerate(Thread[] list)
把此线程组及其子组中的所有活动线程复制到指定数组中。
首先,不使用任何参数调用此线程组的 checkAccess 方法;这可能导致一个安全性异常。
应用程序可以使用 activeCount 方法获取数组大小的估计数,但是,如果数组太小而无法保持所有线程,则忽略额外的线程。如果获得此线程组及其子组中的所有活动线程非常重要,则调用方应该验证返回的 int 值是否严格小于 list 的长度。
由于使用此方法所固有的竞争条件,建议只将此方法用于信息目的。
参数:
list - 放置线程列表的数组。
返回:
放入数组中的线程数。
抛出:
SecurityException - 如果不允许当前线程枚举此线程组。
注意:它的目的是把子组中的所有活动线程复制到指定数组list中。还有一些enumerate的函数,具体参考文档。
public final void interrupt()
中断此线程组中的所有线程。
首先,不使用任何参数调用此线程组的 checkAccess 方法;这可能导致一个安全性异常。
然后,此方法将对此线程组及其所有子组中的所有线程调用 interrupt 方法。
抛出:
SecurityException - 如果不允许当前线程访问此线程组或线程组中的任何线程
分享到:
相关推荐
- JMeter的插件通常放在“lib/ext”目录下,将“Stepping Thread Group”的JAR文件放入该目录后,重启JMeter即可使用。 - 在JMeter测试计划中添加“Stepping Thread Group”,然后根据需求配置各项参数。 - 结合...
ThreadGroup 也可以用来实现线程安全的机制,例如使用 ThreadGroup 中的 lock 对象来实现线程同步,使用 ThreadGroup 中的 Condition 对象来实现线程等待和唤醒等。 ThreadGroup 是 Java 中的一种强大的线程管理...
在JMeter 2.13中使用Ultimate Thread Group和JSON插件,你可以实现以下几点: 1. **负载模拟**:通过Ultimate Thread Group,可以创建更复杂的负载模型,如阶梯式负载、脉冲负载或者模拟真实世界的用户行为。 2. *...
标题“线程池程序-threadGroup”暗示我们将讨论线程池以及它与线程组(ThreadGroup)的关系。线程组是Java中对线程进行组织和管理的一种方式,它是`java.lang.ThreadGroup`类的实例。线程组可以包含线程和其他线程组...
在使用threadgroup时,需要注意的是,虽然它提供了更多的控制,但也需要谨慎处理,避免过度设计和滥用。合理地利用threadgroup提供的功能,可以在保证程序性能的同时,提高代码的健壮性和可读性。 总的来说,...
jmeter测试文件
JMeter模拟压测简单案例, 详细步骤见https://blog.csdn.net/weixin_43575868/article/details/108731214
在介绍JMeter使用之前,需要先了解性能测试的概念和类型。性能测试是为了验证软件系统的稳定性、响应速度、吞吐量等指标是否满足预期要求,它包括负载测试、压力测试、配置测试、容量测试、基准测试和并发测试等。...
1. 选择 Thread Group 右键,添加一个 Summary Report。 2. 运行测试,查看结果。 测试结果包括样本数目、最新样本、吞吐量、平均值、中间值和偏离等指标。这些指标可以帮助我们了解服务器的性能和响应速度。 结论...
- 使用线程组创建线程:`new Thread(ThreadGroup tg, Runnable run, String name)` - 直接创建线程:`new Thread(Runnable run)` 或 `new Thread(Runnable run, String name)` #### 2. 线程组 线程组是用来组织和...
1.Create a Thread Group in Test Group. 2.Add HTTP Cookie Manager in Thread Group 3.Add HTTP Request Defaults in Thread Group. 4.Add Transaction Controller in Thread Group. 5.Edit HTTP Request Defaults...
使用JSR223 Sample进行变量赋值(如build.jmx文件中web(Thread Group)公共变量设置) 使用JSR223 Sample进行变量提取赋值(如bz_release_common.jmx文件中bff(Thread Group)公共变量设置) 使用JSR223 Sample...
虽然在现代多线程编程中,ThreadGroup的使用已经较少,但在线程池的实现中,它可能用于管理和监控线程的生命周期。 在`build.xml`文件中,通常包含Ant构建工具的配置,用于编译、测试和打包Java项目。`src`目录则是...
Thread 1.3.0协议是物联网(IoT)领域中的一个关键标准,它是由Thread Group, Inc.董事会在2023年的规范审查期结束后批准的公共规范。这个协议旨在提升智能家居、智能建筑和其他物联网环境中的无线网络连接性能和效率...
Java线程组操作实例分析主要介绍了Java线程组操作,结合实例形式分析了ThreadGroup类创建与使用线程组相关操作技巧。下面是对Java线程组操作的详细解释。 一、ThreadGroup类的作用 ThreadGroup类是Java中用于管理...
* setUp Thread Group:一种特殊类型的Thread Group,用于执行预测试操作。 * tearDown Thread Group:一种特殊类型的Thread Group,用于执行测试后的动作。 * Thread Group(线程组):用于模拟多个用户的行为,每...
JMeter 测试计划元件包括 ThreadGroup、Controller、Sample、Listeners、Test Fragments、Timer、Assertions、Configuration elements、Pre-processor、Post-processor、Execution order 等。ThreadGroup 是线程组,...
10. 线程组管理:使用 `threadgroups` 命令列出线程组,使用 `threadgroup` 命令设置当前线程组。 11. 断点设置:使用 `stop` 命令在方法中设置断点,使用 `clear` 命令清除断点。 12. 异常处理:使用 `catch` 命令...
- `Thread(ThreadGroup group, Runnable runnable, String threadName, long stackSize)`:创建一个新的线程,指定线程组、`Runnable`对象、线程名称和堆栈大小。 #### Thread的公共方法 `Thread`类提供了丰富的...