三个线程依次顺序执行

T1、T2、T3三个线程顺序执行

public class TestJoin {
    public static void main(String[] args) throws InterruptedException {
        final Thread t1 = new Thread(new Runnable() {
            public void run() {
                System.out.println(Thread.currentThread().getName() + " run 1");
            }
        }, "T1");
        final Thread t2 = new Thread(new Runnable() {
            public void run() {
                System.out.println(Thread.currentThread().getName() + " run 2");
                try {
                    t1.join(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, "T2");
        final Thread t3 = new Thread(new Runnable() {
            public void run() {
                System.out.println(Thread.currentThread().getName() + " run 3");
                try {
                    t2.join(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, "T3");
        // method1
        //t1.start();
        //t2.start();
        //t3.start();

//        method 2 使用 单个任务的线程池来实现。保证线程的依次执行
        ExecutorService executor = Executors.newSingleThreadExecutor();
        executor.submit(t1);
        executor.submit(t2);
        executor.submit(t3);
        executor.shutdown();
    }
}
在这里发现结果每次都是 t1执行,t2执行,t3执行,这里达到目的了。


### JMeter 线程执行顺序设置与控制 在同一测试计划内,多个线程组默认情况下会并行执行。为了使线程组按照特定顺序依次执行,在测试计划属性中需勾选“独立运行每个线程组”,这使得各线程组能够依照定义的次序逐一启动[^2]。 对于更复杂的执行逻辑,JMeter 提供了 `setUp` 和 `tearDown` 特殊类型的线程组。这些特殊线程组允许在所有其他标准线程组之前或之后执行某些操作。具体来说: - **setUp 线程组**:这类线程组会在任何常规线程组开始前被执行,适用于完成必要的前置条件设定,如初始化数据库连接、登录服务或是准备测试数据等任务[^4]。 - **tearDown 线程组**:相反地,在全部正常线程组完成后才会触发此类型线程组的工作流程,通常用来处理资源释放、清除临时文件或其他收尾性质的任务。 当涉及到具体的线程组内部组件时,通过组合使用不同的控制器(例如 If 控制器和 While 控制器),可以进一步精细化控制各个采样器之间的相对位置及其激活时机。特别是针对那些希望延迟启动或者有条件跳过的部分,这种方法显得尤为重要[^5]。 #### 设置示例 假设存在三个主要功能模块 A, B 和 C 需要按先后顺序调用,并且还需要额外加入 token 获取作为预备步骤 D: 1. 创建名为 "D - Token Acquisition" 的 setUp 线程组; 2. 定义普通线程组分别对应于业务流程中的A、B、C环节; 3. 勾选测试计划下的选项以确保上述四个线程组依序而非并发的方式被调度; 4. 如果有必要的话,在后续两个及以上连续执行线程组之间插入适当的等待机制或者其他形式的时间管理措施来保障预期的行为模式得以实现。 ```python # Python伪代码展示概念性的配置过程 test_plan = jm.TestPlan() test_plan.setRunThreadGroupsSequentially(True) setup_thread_group = jm.ThreadGroup(name="Setup Thread Group") main_a_thread_group = jm.ThreadGroup(name="Main A Thread Group") main_b_thread_group = jm.ThreadGroup(name="Main B Thread Group") main_c_thread_group = jm.ThreadGroup(name="Main C Thread Group") test_plan.add(setup_thread_group) test_plan.add(main_a_thread_group) test_plan.add(main_b_thread_group) test_plan.add(main_c_thread_group) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值