线程组

1.线程组可以对多个线程进行统一管理,Java中用ThreadGroup来代表线程组,
如果没有在声明Thread时指定,那么Java默认将父线程线程组设置为当前线程的线程组。实例如下:

public class MyRunnerable1 implements Runnable {
    public void run() {
        System.out.println("当前线程组名:"+Thread.currentThread().getThreadGroup().getName());
        System.out.println("当前线程名:"+Thread.currentThread().getName());
    }
}
public class TestThreadGoup {
    public static void main(String[] args) {
         Thread thread1=new Thread(new MyRunnerable1());
         thread1.start();
        System.out.println("当前main线程组名:"+Thread.currentThread().getThreadGroup().getName());
        System.out.println("当前main线程名:"+Thread.currentThread().getName());
    }
}

执行结果如下

当前main线程组名:main
当前main线程名:main
当前线程组名:main
当前线程名:Thread-0

2.线程组常用的方法以及数据结构
(1).获取当前线程组名字

Thread.currentThread().getThreadGroup().getName()

(2)复制线程组(可以将线程组复制到线程数组里)

threadGroup.enumerate(array)

(3)设置线程组优先级(当线程组里线程大于线程的优先级,此时线程的优先级将会失效)

threadGroup.setMaxPriority(num);

3.守护线程
线程分为守护线程和用户线程
什么是守护线程?
所有用户线程执行完以后,守护线程也会自动退出,守护线程拥有自动结束其生命周期的特性
守护线程运用的场景?
守护线程一般用来执行后台任务,当我们希望jvm退出时,这个线程能够自动结束,此时可以选择守护线程,垃圾回收线程就是典型的守护线程。

public class MyRunnerable implements  Runnable {
    public void run() {
        for (int i = 0; i <1000 ; i++) {
            System.out.println("我是守护线程,正在执行!"+i);
        }
    }
}
public class MyRunnerable3 implements  Runnable {
    public void run() {
        for (int i = 0; i <5 ; i++) {
            System.out.println("我是用户线程"+i);
        }
    }
}
 MyRunnerable myRunnerable=new MyRunnerable();
        MyRunnerable3 myRunnerable3=new MyRunnerable3();
        Thread thread2=new Thread(myRunnerable);
        Thread thread3=new Thread(myRunnerable3);
        thread2.setDaemon(true);
        thread2.start();
        thread3.start();
        System.out.println(Thread.currentThread().getName());

执行结果

main
我是守护线程,正在执行!0
我是守护线程,正在执行!1
我是用户线程0
我是守护线程,正在执行!2
我是用户线程1
我是守护线程,正在执行!3
我是用户线程2
我是守护线程,正在执行!4
我是用户线程3
我是守护线程,正在执行!5
我是用户线程4
我是守护线程,正在执行!6
我是守护线程,正在执行!7
我是守护线程,正在执行!8
我是守护线程,正在执行!9
我是守护线程,正在执行!10
我是守护线程,正在执行!11
我是守护线程,正在执行!12
我是守护线程,正在执行!13
Process finished with exit code 0

可以看出守护线程在没执行完的情况下退出了

### JMeter 线程组的配置与使用方法 JMeter 的线程组是性能测试的核心组件之一,它定义了如何模拟用户负载以及请求发送的方式。以下是关于 JMeter 线程组配置和使用的详细介绍: #### 1. 基本概念 JMeter 线程组是一个测试计划的基础单元,所有其他元件都需要嵌套在至少一个线程组中运行。每个线程代表一个虚拟用户,这些线程可以并行执行任务[^1]。 #### 2. 主要参数说明 以下是一些常见的线程组参数及其作用: - **Number of Threads (users)**:表示需要模拟的用户数量,即并发线程的数量。 - **Ramp-Up Period (in seconds)**:指启动全部线程所需的时间间隔(以秒为单位)。例如,如果有 10 个线程,并且 Ramp-Up 时间设为 10 秒,则每秒钟会启动一个新的线程[^3]。 - **Loop Count**:控制每个线程重复执行采样器操作的次数。如果设置为无限循环 (`Forever`) 或者勾选 `Scheduler` 并设定结束时间,则可以根据需求灵活调整测试持续周期[^2]。 #### 3. 进阶功能——自定义线程组 为了更精确地控制流量模式,可以通过安装插件扩展标准线程组的功能。比如 Custom Thread Groups 提供多种预定义模板来实现复杂的业务逻辑仿真,像阶梯型增长、脉冲波形等特殊场景下的压力施加方式都可以轻松完成配置。 #### 4. 同步定时器的应用 当涉及到某些特定情况下需让多个请求同时发生时,可利用 Synchronizing Timer 来协调不同线程之间的行为动作。需要注意的是,在实际应用过程中应合理规划其相关属性值以免造成不必要的延迟或者资源浪费现象出现。例如,“超时时间”的计算公式可以帮助确定合适的等待上限[^4]: \[ \text{超时时间} > (\text{请求集合数量} * 1000) / (\text{线程数} / \text{线程加载时间}) \] ```python # 示例 Python 计算脚本用于估算同步定时器的最佳超时时间 def calculate_timeout(requests, threads, ramp_up): thread_load_time = ramp_up / threads timeout_ms = requests * 1000 / (threads / thread_load_time) return int(timeout_ms) requests_count = 50 thread_number = 100 rampup_period_seconds = 60 optimal_timeout = calculate_timeout(requests_count, thread_number, rampup_period_seconds) print(f"Optimal Timeout Value: {optimal_timeout} ms") ``` 以上代码片段展示了如何依据给定条件动态得出推荐的同步定时器超时数值。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值