【测试框架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();
}
相关推荐
香蕉大香蕉(06敬畏市场)16 小时前
高频八股 · JVM(8)
java·jvm·面试·八股·大厂实习
北冥you鱼18 小时前
Go 语言 GORM 使用 Preload:从关联查询到嵌套预加载的完整实践
开发语言·jvm·golang
兔头?18 小时前
JVM学习文档
jvm·学习
wuminyu20 小时前
JVM规范学习总结:class执行性能差异
java·linux·c语言·jvm·c++
EVEN-091320 小时前
Linux-线程控制
linux·jvm
刚入门的大一新生2 天前
Linux-线程概念
linux·jvm
eleven_4u2 天前
QPS如何计算,如何部署架构
java·linux·运维·jvm·中间件
qq_452396232 天前
第八篇:《VACUUM、自动清理与膨胀治理》
jvm·数据库·oracle
努力努力再努力wz2 天前
【Lua 入门系列】从顺序执行到分支与循环:一文理解 Lua 控制结构、作用域与跳转规则
junit·单元测试·lua
甜到心里的蛋糕2 天前
抖音评论自动回复机器人部署实践:无头 Chrome + DeepSeek + NapCat(2C2G 云主机)
java·jvm·chrome·python·抖音·deepseek