是否有一个静态分析工具可以自动检查Java项目中的竞争条件?

时间:2012-01-27 18:13:58

标签: java multithreading static-analysis race-condition

是否有静态分析工具可自动检查Java项目中的竞争条件?最好是支持Eclipse,Spring和Hibernate的。感谢

编辑:我可能不一定需要一个静态分析工具,但可能是一个以不同的随机速度运行java线程(至少是JUnit)的工具,也可以在调试器下重现相同的速度配置文件。因此,几乎任何检测竞争条件的方式都会有所帮助。

8 个答案:

答案 0 :(得分:6)

JLint可用于检测竞争条件。 IBM的ConTest旨在测试并发性问题,所以也要看看它。

答案 1 :(得分:3)

ThreadSafehttp://www.contemplateltd.com/threadsafe,免费试用)确实提出了问题所要求的内容,也涵盖了除竞争条件之外的Java并发性缺陷。有关在开源应用程序(包括Apache JMeter和K9Mail)中找到的并发错误的示例,请参阅此InfoQ article。有关用户的意见,请参阅Ivan Senic's blog

(披露:ThreadSafe是一个商业工具,我是Contemplate的共同创始人,Contemplate是生产它的公司。)

答案 2 :(得分:1)

毫无疑问,静态分析是一件好事。但我可以建议不要那么静止JPF吗?

答案 3 :(得分:1)

如果你使用eclipse,你可以使用FindBugs来检查代码。如果需要,也可以从命令行或使用Swing界面运行它。

答案 4 :(得分:1)

Coverity Static Analysis for Java标记竞争条件,以及可能的死锁和原子性违规。

此外,Coverity还有一款动态分析产品,可以检测您自己的测试并报告潜在的竞争条件和死锁。请注意,在单元测试中运行它通常是无效的,因为它们的逻辑往往比复杂应用程序在生产中的交互类型更简单,并且通过压力,负载测试甚至临时测试运行动态分析更有效。

免责声明:我曾经为Coverity工作。

答案 5 :(得分:0)

我没有亲自使用过这个产品,但是当你写下你正在寻找“一个以不同随机速度运行Java线程(至少是JUnit)的工具”时,我想到了Corensic Jinx。根据Corensic的产品描述页面,Jinx观察本机操作系统线程级别的线程操作,并“动态构建一组潜在的交错(即,在未来某些条件下将发生的交替可能性或执行方案)导致并发错误,并快速测试这些执行路径以解决表面并发问题,包括死锁,竞争条件和原子性违规。“

对于全Java应用程序,这可能太低级,但Corensic claims可能支持Java和Microsoft .NET应用程序。

请参阅Using Jinx with Java

答案 6 :(得分:0)

AppDynamics是一个附加到JVM的工具,它提供有关各个线程的内存使用情况的信息。

答案 7 :(得分:0)

我开发了一个名为http://vmlens.com的工具,它可以检测数据竞争,尤其是写/写数据竞赛。它搜索从不同线程访问的内存字段,而不进行同步。

所以它不是静态分析工具,而是动态的。要检测数据争用,必须至少通过两个不同的线程访问内存位置。

此致 托马斯