【问题标题】:Guidelines for testing multithreaded code or ensuring that code is thread-safe测试多线程代码或确保代码是线程安全的指南
【发布时间】:2011-05-25 13:45:13
【问题描述】:

是否有任何测试多线程代码的指南(除了在问题上抛出一堆线程并交叉手指)。

我基本上是在寻找测试数据损坏、死锁和其他并发问题的好方法。本质上,我希望能够通过测试证明代码是线程安全的。

Java 中是否有任何框架可以让您轻松地为多线程场景编写测试?

【问题讨论】:

  • 代码审查怎么样?许多常见错误在您假设它们存在后就相对容易发现。
  • 这是关于测试工具,而不是指南,但也许会对您有所帮助:stackoverflow.com/questions/3256064/…
  • 可能想看看以下相关问题:stackoverflow.com/questions/1634378/…
  • 一种方法是加载...增加相关代码的负载以查看哪些表面并使用 jconsole 和检测死锁按钮如果您怀疑有可疑之处...加载大部分由于显而易见的原因,总是暴露出许多关于线程的问题。
  • @ammoQ 是的,我已经进行了代码审查,这些肯定会有所帮助。但是,事情可能会因代码审查而溜走。我认为除了代码审查之外进行测试会更有帮助。

标签: java multithreading unit-testing testing concurrency


【解决方案1】:

我编写了很多多线程代码,但从未发现任何可以轻松测试我没有预料到的并发正确性问题的东西。大多数时候,我必须考虑它可能会破坏的场景,然后我如何在极端版本中证明它的正确性(通常使用 CountDownLatches 或类似方法以我认为它可能会破坏的方式弯曲它。

绝对使用 FindBugs 和类似的静态分析工具来帮助发现潜在问题,并且绝对让您的并发问题尽可能简单。共享可变内存问题很难,但实际上很容易重新定义问题,因此您不共享可变状态,只共享不可变状态。这让生活变得简单多了。哦,阅读 JCiP——然后再阅读一遍。并审核您的代码。

【讨论】:

    【解决方案2】:

    GroboUtils,http://groboutils.sourceforge.net/testing-junit/using_mtt.html,提供了一些用于测试线程的 JUnit 实用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      相关资源
      最近更新 更多