是否有静态分析工具可自动检查Java项目中的竞争条件?最好是支持Eclipse,Spring和Hibernate的。感谢
编辑:我可能不一定需要一个静态分析工具,但可能是一个以不同的随机速度运行java线程(至少是JUnit)的工具,也可以在调试器下重现相同的速度配置文件。因此,几乎任何检测竞争条件的方式都会有所帮助。答案 0 :(得分:6)
答案 1 :(得分:3)
ThreadSafe(http://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应用程序。
答案 6 :(得分:0)
AppDynamics是一个附加到JVM的工具,它提供有关各个线程的内存使用情况的信息。
答案 7 :(得分:0)
我开发了一个名为http://vmlens.com的工具,它可以检测数据竞争,尤其是写/写数据竞赛。它搜索从不同线程访问的内存字段,而不进行同步。
所以它不是静态分析工具,而是动态的。要检测数据争用,必须至少通过两个不同的线程访问内存位置。
此致 托马斯