【测试框架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();
}
相关推荐
kian.wqn10 小时前
【JVM核心体系02】JVM 运行时内存区域:堆、栈、元空间、直接内存一次讲清
jvm
用户094248568031 天前
第12章:JDK 诊断工具箱——jps / jstat / jmap / jcmd / jhsdb
java·jvm
程序员阿鹏1 天前
双亲委派机制
java·jvm·数据结构·后端
用户094248568031 天前
第11章:OpenJDK反射、动态代理与 MethodHandle 初探
java·jvm
wuminyu1 天前
纯轻量级锁体系下C2编译器锁粗化和消除机制剖析
java·linux·c语言·jvm·c++
binqian1 天前
【java】Java 两种锁机制与线程阻塞唤醒原理
jvm·spring boot·spring
香吧香2 天前
java服务异常日志只打印异常类型,没有堆栈定位分析
java·jvm·异常
程序员黎剑2 天前
JVM-元空间溢出-OutOfMemoryError-Metaspace排查与解决
jvm
11路没有终点2 天前
Java 微服务性能调优:jstack/jmap/jstat 三剑客实战指南
jvm·性能测试