java - 在单元测试中使用多少个线程?

标签 java multithreading unit-testing

我正在对线程安全类进行单元测试。我从不同的线程调用它的方法,以确保它们都收到相同的结果(简而言之)。这就是我决定使用多少线程的方式:

int threads = Runtime.getRuntime().availableProcessors() * 4;

这是一个好的做法吗?我应该使用多少?越多越好?

最佳答案

我通常运行 3 组测试:

  • 一个线程来检查单线程环境中的正确行为
  • 处理器数量 + 1(或任何典型的应用程序设置)
  • 许多线程(例如 1000 个)以增加上下文切换和争用

对于多线程测试,我尝试最大化交错,通常是通过使用 CountDownLatch 同步任务的开始,以便所有线程或多或少同时开始它们的任务。

我还尽量避免在测试期间进行额外的同步(例如,通过使用线程安全结构来存储一些结果),因为它可能会人为地“重新同步”被测试的代码 - 将根据具体情况进行评估。

JCiP ,第 12 章,是高效多线程测试的良好灵感来源(即提供了许多引发并发错误的提示)。

最后,正如@PeterLawrey 所指出的,您不能通过测试保证您的代码是线程安全的,您只能尝试增加发现并发错误的机会。

关于java - 在单元测试中使用多少个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12159932/

相关文章:

c++ - 从 Boost 线程返回 Double

java - 在多线程环境中读取的值

java - mockito 验证方法内部方法调用

c# - 在 Visual Studio 2008 中更改单元测试项目的输出路径

java - 将 jar 转换为可执行文件的命令行工具?

Java:为什么我的 Equals 方法不起作用?

java - 为什么我的程序没有退出 while 循环?

java - 我无法显示我的 ImageIcon

java - 如果我将变量复制到另一个变量并尝试更改它,是否会使变量 volatile 起作用?

python - Django 测试显示导入错误,但项目通过运行服务器成功运行