ThreadGroup实例

本文介绍了一个使用Java实现的线程组管理示例,通过创建两个线程组A和B,并在每个线程组中启动多个子线程来演示如何管理和控制线程组。示例还展示了如何通过主线程停止所有子线程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * <p>Title: 线程组群</p>
 * <p>Description: 通过线程组管理下面的多个线程。</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Filename: myThreadgroup.java</p>
 * @version 1.0
 */
public class myThreadgroup extends Thread {
  public static int flag=1;
  ThreadGroup tgA;
  ThreadGroup tgB;
/**
 *<br>方法说明:主方法
 *<br>输入参数:
 *<br>返回类型:
 */
  public static void main(String[] args){
    myThreadgroup dt = new myThreadgroup();
    //声明线程组A
    dt.tgA = new ThreadGroup("A");
    //声明线程组B
    dt.tgB = new ThreadGroup("B");
    for(int i=1;i<3;i++)
      new thread1(dt.tgA,i*1000,"one"+i);
    for(int i=1;i<3;i++)
      new thread1(dt.tgB,1000,"two"+i);
    //启动本线程和所有线程组
    dt.start();
  }
/**
 *<br>方法说明:覆盖run方法,控制线程组
 *<br>输入参数:
 *<br>返回类型:
 */
  public void run(){
    try{
     this.sleep(5000);
     this.tgB.checkAccess();
     //停止线程组B,
     this.tgB.stop();
     System.out.println("**************tgB stop!***********************");
     this.sleep(1000);
     //检查线程组A是否可以更改
     this.tgA.checkAccess();
     //停止线程组A
     this.tgA.stop();
     System.out.println("**************tgA stop!***********************");
     
    }catch(SecurityException es){
       System.out.println("**"+es);
    }catch(Exception e){
       System.out.println("::"+e);
    }
   }
}
/**
 * <p>Title: 线程类</p>
 * <p>Description: 通过构造器的参数,实现不同的线程</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Filename: thread1.java</p>
 * @version 1.0
 */
class thread1 extends Thread {
    int pauseTime;
    String name;
    public thread1(ThreadGroup g,int x, String n) {
        super(g,n);
        pauseTime = x;
        name = n;
        start();
    }
/**
 *<br>方法说明:必须覆盖的方法。
 *<br>输入参数:
 *<br>返回类型:
 */
   public void run ()
   {
     while(true) {
      try {
          System.out.println(name+"\t"+this.getThreadGroup().getName());
          Thread.sleep(pauseTime);
      } catch(Exception e) {
          System.out.println(e);
      }
    }
   }
}
### JMeter中Stepping Thread Group的用法和配置 #### 添加Stepping Thread Group到测试计划 为了在JMeter中使用Stepping Thread Group,需先将其添加至测试计划。通过右键点击测试计划节点,在弹出菜单中依次选择`添加 -> 线程(用户) -> jp@gc - Stepping Thread Group`来完成操作[^2]。 #### 配置基本参数 一旦成功添加了Stepping Thread Group组件之后,便可以对其进行详细的参数设定: - **名称**: 可自定义该线程组的名字以便识别。 - **注释**: 提供额外的信息描述此线程组的作用或目的。 - **启动延迟时间 (ms)**: 设置首次执行前等待的时间间隔。 - **初始线程数**: 定义模拟用户的起始数量。 - **最终线程数**: 设定结束时达到的最大并发用户量。 - **每秒增加/减少的线程数**: 控制每次循环期间新增或移除虚拟用户的速率。 - **保持最大线程数持续时间(s)**: 当到达预设的最大用户数目后维持这一状态多长时间。 - **斜坡上升周期数(cycles)**: 表明整个过程中有多少次完整的增减过程;如果设置为0,则表示无限循环直到手动停止运行[^3]。 #### 应用场景实例化说明 假设要创建一个逐步提升负载直至峰值再逐渐回落的压力测试方案,具体做法如下所示: ```plaintext 初始线程数: 10 最终线程数: 50 每秒增加/减少的线程数: 5 保持最大线程数持续时间(s): 60 斜坡上升周期数(cycles): 1 ``` 这意味着从最初的10个并发请求开始,每隔一秒就增加五个新的连接,直到总数达到五十为止,并在此水平上停留一分钟,随后按照相同的速度递减排放流量回到起点[^1]。 #### 实现代码片段展示 虽然对于图形界面工具而言并不涉及编程实现细节,但如果想要自动化构建此类结构化的测试脚本,可以通过命令行方式调用API接口或者编写Groovy/Jython等脚本来辅助完成任务。下面给出一段简单的Python伪代码用于示意如何动态调整这些属性值: ```python from jmeter_api.basics.thread_group import BasicThreadGroup, ThreadGroupAction thread_group = BasicThreadGroup( name="My Step Thread", comments="A stepping thread group example.", num_threads_initial=10, rampup_period_ms=0, loop_count=-1, scheduler=False, duration=None, delay=None, on_sample_error=ThreadGroupAction.CONTINUE, ) # Set specific properties for stepping behavior thread_group.set_property('Loop Controller', 'continue_forever', False) thread_group.set_property('jp@gc - Stepping Thread Group.maxThreads', 50) thread_group.set_property('jp@gc - Stepping Thread Group.startUsersPerSec', 5) thread_group.set_property('jp@gc - Stepping Thread Group.rampUpPeriodInMinutes', 1) thread_group.set_property('jp@gc - Stepping Thread Group.holdMaxTimeInSeconds', 60) thread_group.set_property('jp@gc - Stepping Thread Group.stepRampUpCyclesCount', 1) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值