我正在对线程安全类进行单元测试。我从不同的线程调用它的方法,以确保它们都收到相同的结果(简而言之)。这就是我决定使用多少线程的方式:
int threads = Runtime.getRuntime().availableProcessors() * 4;
这是一个好的做法吗?我应该使用多少?越多越好?
最佳答案
我通常运行 3 组测试:
- 一个线程来检查单线程环境中的正确行为
- 处理器数量 + 1(或任何典型的应用程序设置)
- 许多线程(例如 1000 个)以增加上下文切换和争用
对于多线程测试,我尝试最大化交错,通常是通过使用 CountDownLatch 同步任务的开始,以便所有线程或多或少同时开始它们的任务。
我还尽量避免在测试期间进行额外的同步(例如,通过使用线程安全结构来存储一些结果),因为它可能会人为地“重新同步”被测试的代码 - 将根据具体情况进行评估。
JCiP ,第 12 章,是高效多线程测试的良好灵感来源(即提供了许多引发并发错误的提示)。
最后,正如@PeterLawrey 所指出的,您不能通过测试保证您的代码是线程安全的,您只能尝试增加发现并发错误的机会。
关于java - 在单元测试中使用多少个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12159932/