【测试框架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();
}
相关推荐
ly76898 小时前
Java 21 到 Java 26 新特性详解:虚拟线程、模式匹配、结构化并发、HTTP/3 与 AOT
java·jvm
我星期八休息8 小时前
Linux I/O多路转接—epoll
java·linux·运维·服务器·开发语言·jvm·算法
wuminyu9 小时前
Java FFM处理网络读写事件源码剖析
java·linux·c语言·jvm·c++
剑指offer.16 小时前
Linux多任务-线程篇
java·jvm·算法
Zzzzmo_16 小时前
JVM 知识整理
jvm
戴西软件20 小时前
远程协同仿真是什么体验?
运维·jvm·人工智能·自动化·rpa
西峰u2 天前
Java多线程初阶完整总结|线程、锁、volatile、等待通知、常见案例
java·开发语言·jvm
H_老邪2 天前
JVM 遇到的问题-1.1
jvm
SKH.2 天前
Linux软件编程(5)线程
java·linux·jvm
liangbo72 天前
JVM规范第 2章:从 class 文件到运行时数据区
java·jvm