Java 中 JUnit 怎么利用全新的 ExecutionMode 配置在多核 CPU 上开启测试用例的并行并发执行

风芳同学_8912

风芳同学_8912

2026-07-28

580人浏览

原创

junit 5 默认串行执行,需通过 junit-platform.properties 或 maven surefire 插件启用并行(如设置 junit.jupiter.execution.parallel.enabled=true),并配合 @execution(concurrent) 注解及 @resourcelock 控制资源同步,方可实现真正并发。

java 中 junit 怎么利用全新的 executionmode 配置在多核 cpu 上开启测试用例的并行并发执行

JUnit 5 原生支持并行执行测试,但默认是**串行**的。要真正利用多核 CPU 提升测试执行效率,需显式启用并行模式,并合理配置执行策略和资源同步机制。

启用并行执行的核心配置

仅加注解不够,必须配合 junit-platform.properties 或 Maven Surefire 插件配置,否则 @Execution(ExecutionMode.CONCURRENT) 不生效。

  • 在 src/test/resources/junit-platform.properties 中添加:
jest.jupiter.execution.parallel.enabled=true
junit.jupiter.execution.parallel.config.dynamic.factor=2
junit.jupiter.execution.parallel.mode.default=concurrent
junit.jupiter.execution.parallel.mode.classes.default=concurrent
  • 或在 Maven 的 pom.xml 中配置 Surefire 插件(推荐):
<plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-surefire-plugin</artifactid><version>3.0.0-M5</version><configuration><properties><configurationparameters>
        junit.jupiter.execution.parallel.enabled = true
        junit.jupiter.execution.parallel.mode.default = concurrent
      </configurationparameters></properties></configuration></plugin>

按类或方法粒度控制并发行为

JUnit 5 提供两级并行控制:测试类级别和测试方法级别。两者可组合使用,但需注意作用范围。

Java Maven Code Review
Java Maven Code Review

审查Java Maven项目(ZIP压缩包或GitLab仓库URL),检查代码规范、命名、模块边界、可维护性问题以及重复代码。

下载
  • 在测试类上标注,表示该类内所有 @Test 方法可并发执行:
@Execution(ExecutionMode.CONCURRENT)
class ConcurrentTestClass { ... }
  • 在单个测试方法上标注,仅对该方法生效(类级未启用时也有效):
@Test
@Execution(ExecutionMode.CONCURRENT)
void testWithSharedResource() { ... }
  • 若类已标注 @Execution(CONCURRENT),但某个方法需串行(如操作静态变量),可用:
@Test
@Execution(ExecutionMode.SAME_THREAD)
void mustRunAlone() { ... }

避免并发冲突:用 @ResourceLock 保护共享资源

并行执行时,多个测试可能同时读写同一资源(如 System.setProperty、静态字段、临时文件等),导致断言不稳定。JUnit 5 提供声明式锁机制。

  • @ResourceLock("system.props") 表示该测试需独占访问名为 "system.props" 的资源;
  • 搭配 ResourceAccessMode.READ_WRITE(默认)用于写操作,READ 用于只读场景,允许多个读操作并发;
  • 可跨类生效——只要锁名一致,不同测试类中的方法也会排队执行。

示例:

@Test
@ResourceLock("system.props")
void setsCustomProperty() {
  System.setProperty("test.key", "value");
}

@Test
@ResourceLock(value = "system.props", mode = ResourceAccessMode.READ)
void readsCustomProperty() {
  assertNotNull(System.getProperty("test.key")); // 安全读取
}

验证并行是否生效

光看执行时间不够,建议加日志或计数器确认线程实际并发:

  • 在测试方法中打印当前线程名:System.out.println(Thread.currentThread().getName());
  • 观察输出中是否出现多个 ForkJoinPool-worker-N 线程交替执行;
  • 用 JVisualVM 或 jstack 查看测试进程的活跃线程数是否接近 CPU 核心数;
  • 注意:Maven 默认 fork 一个 JVM 进程运行测试,确保 Surefire 的 forkCount 不设为 1(会禁用并行)。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

9817

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

6942

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6132

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1064

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

888

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1296

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2569

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

19911

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1155

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Apache Maven 官方安装指南
Apache Maven 官方安装指南

共0课时 | 0人学习

Apache Maven 官方用户中心
Apache Maven 官方用户中心

共0课时 | 0人学习