【测试框架Junit】强制终止JVM进程

目标:我想要验证一下继承Thread创建的后台线程是否正常运行。
结论:

1、使用junit单元测试创建的后台线程(也就是非守护线程),JVM进程会在执行完单元测试代码后立即退出;

2、使用普通main函数创建的后台线程,JVM会等待后台线程结束;

3、由此得出,常规的单元测试函数,不适合测试多线程逻辑;

java 复制代码
public class CreateThreadWithExtendsThread extends Thread {

    @Override
    public void run(){
        while(true){
            System.out.println("Thread is running, Thread name is " + Thread.currentThread().getName());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

// 单元测试
@Test
void contextLoads() throws InterruptedException {
    CreateThreadWithExtendsThread createThreadWithExtendsThread = new CreateThreadWithExtendsThread();
    createThreadWithExtendsThread.start();
}

运行结果是:

bash 复制代码
C:\Users\ourenjiang\.jdks\corretto-17.0.19\bin\java.exe "...
Thread is running, Thread name is Thread-0

进程已结束,退出代码为 0

如果是通过普通main来测试:

java 复制代码
public static void main(String[] args) {
    CreateThreadWithExtendsThread createThreadWithExtendsThread = new CreateThreadWithExtendsThread();
    createThreadWithExtendsThread.start();
}

运行结果是符合预期的:

java 复制代码
C:\Users\ourenjiang\.jdks\corretto-17.0.19\bin\java.exe "...
Thread is running, Thread name is Thread-0
Thread is running, Thread name is Thread-0
Thread is running, Thread name is Thread-0
Thread is running, Thread name is Thread-0

进程已结束,退出代码为 130

如果你直的不想写main函数,可以手动join线程,从而达到阻塞主线程的作用

java 复制代码
// 单元测试
@Test
void contextLoads() throws InterruptedException {
    CreateThreadWithExtendsThread createThreadWithExtendsThread = new CreateThreadWithExtendsThread();
    createThreadWithExtendsThread.start();
}
相关推荐
佳児素花痴╮8 小时前
线程知识点
java·开发语言·jvm
用户0942485680313 小时前
第29章:【OpenJDK中级篇综合实战】百万长连接网关的JVM稳定性工程
java·jvm
夜之眷属13 小时前
JVM实战:服务器堆外内存去哪了(NMT实测)
java·服务器·jvm·后端·性能优化
智码看视界13 小时前
Day84-Arthas诊断实战:CPU飙高/死锁/内存泄漏排查三板斧
jvm·内存泄漏·arthas·死锁·性能诊断·生产调优
万年咸鱼16 小时前
C语言内功心法篇——变量与数据类型
c语言·jvm·算法
rannn_11117 小时前
JVM 垃圾回收面试题全解析:从基础到进阶
java·开发语言·jvm·后端·面试
rannn_11119 小时前
JVM 面试题:类加载过程详解(附高频考点)
java·jvm·后端
Shaoshing1 天前
ThreadLocal
java·jvm·threadlocal
写后端的胖头鱼1 天前
一文详解CAS
java·jvm·spring·cas·乐观锁·自旋
估值探索者1 天前
【Python量化系统工程实战 #08】从脚本到生产:量化系统上线 checklist 的最小闭环
java·开发语言·jvm·python·数据挖掘·数据·股票数据api接口