测试并发应用程序
应用程序的线程在计算机上运行时无法保证任何执行顺序(除非引入了同步机制),因此很难(大部分情况下是不可能)对所有可能出现的情况都进行测试。
还有些错误不可能进行重现,因为它们仅发生在偶然或者独特的场合中。
或者由于 CPU 核数的原因,错误会在一台机器上发生但是不会在另一台上发生。
为探查和重现这些场景,就要使用不同的工具。
-
Debug:
可以使用调试器调试应用程序。
如果应用程序中仅有少量线程,这个过程将会非常枯燥,而且需要在每个线程中都一步一步地进行调试。
可以对Eclipse或NetBeans进行配置以测试并发应用程序。 - MultithreadedTC:
这是Google Code的一个备案项目,可用于在并发应用程序中强制规定执行顺序。 - Java PathFinder:
这是NASA用于验证Java程序的一种执行环境。它还支持对并发应用程序的有效性验证。 - Unit testing:
可以创建一组单元测试(使用 JUnit 或者 TestNG),并且多次进行每个测试(例如 1000 次)。
如果每个测试都成功了,那么即使应用程序出现竞争,其可能性也并不高,也是可被生成环境所接受的。
你可以在自己的代码中加入一些断言,以此验证是否存在竞争条件。