Java语言规范7(JLS7-17.4.5)定义了一个“正确同步”的程序,如下所示:“当且仅当所有顺序一致的执行都没有数据争用时,程序才能正确同步”。
JLS7-17.4.5还声明:
如果没有正确的同步,很可能会出现非常奇怪,混乱和违反直觉的行为。
因此,从程序员的角度来看,根据上述定义,使用工具确定程序是否“正确同步”将非常有用。
有这样的工具吗?谷歌上面找不到任何东西。如果没有这样的工具,是否可以制作一个?
答案 0 :(得分:4)
FindBugs可以找到一些并发错误(在the list of detected bugs上搜索“多线程正确性”)并且可能还有其他类似的工具,但最终只能通过细致的代码设计来避免一些错误审查。
您还可以测试类的并发性问题,但它是一个统计游戏,根据OS / CPU架构等,可能永远不会显示一些错误。
我听说过Java concurrency torture工具,但从未使用过它。官方JSR 166 Concurrency Interest list已经多次提到它。