Java 是否有一个工具来确定一个程序是否;“正确同步”;如JLS中所定义?

Java 是否有一个工具来确定一个程序是否;“正确同步”;如JLS中所定义?,java,concurrency,jls,java-memory-model,Java,Concurrency,Jls,Java Memory Model,Java语言规范7(JLS7-17.4.5)定义了如下“正确同步”程序:“当且仅当所有顺序一致的执行都没有数据争用时,程序才正确同步” JLS7-17.4.5还规定: 如果没有正确的同步,可能会出现非常奇怪、混乱和违反直觉的行为 因此,从程序员的角度来看,有一个工具可以根据上述定义确定程序是否“正确同步”,这将是非常有用的 有这样的工具吗?我通过谷歌搜索什么也找不到。如果没有这样的工具,有可能制作一个吗?可以找到一些并发错误(在上搜索“多线程正确性”),并且可能还有其他类似的工具,但最终一些错误

Java语言规范7(JLS7-17.4.5)定义了如下“正确同步”程序:“当且仅当所有顺序一致的执行都没有数据争用时,程序才正确同步”

JLS7-17.4.5还规定:

如果没有正确的同步,可能会出现非常奇怪、混乱和违反直觉的行为

因此,从程序员的角度来看,有一个工具可以根据上述定义确定程序是否“正确同步”,这将是非常有用的

有这样的工具吗?我通过谷歌搜索什么也找不到。如果没有这样的工具,有可能制作一个吗?

可以找到一些并发错误(在上搜索“多线程正确性”),并且可能还有其他类似的工具,但最终一些错误只能通过仔细的代码设计和审查来避免

您还可以测试类的并发性问题,但这是一个统计游戏,一些bug可能永远不会出现,这取决于OS/CPU架构等


我听说过这个工具,但从未使用过。官方网站上已经多次提到它。

Google的“Java静态数据竞争检测”。我知道一些工具可以用来测试程序是否在一般意义上正确同步。然而,我感兴趣的是一种工具,它可以根据JLS7-17.4.5中“正确同步”程序的确切定义来确定程序是否正确同步。@FransLundberg注意,“正确同步”是“多线程正确性”的子集。例如,如果两条语句分别正确同步,如果程序要求它们也是原子的,则可能仍然存在一般的正确性问题。@FransLundberg cf 17.4.3如果程序没有数据竞争,则程序的所有执行看起来都是顺序一致的。顺序一致性和/或不受数据竞争的影响仍然允许因操作组而产生的错误,这些操作组需要在原子上被感知,而不需要。因此,您的问题可以重新表述为静态查找数据竞赛,正如Marko在另一篇评论中所建议的那样。@FransLundberg有趣的讨论:谢谢您的输入和链接。我同意你的评论:“正确同步”是“多线程正确性”的子集。这个问题可以按照你/马尔科的说法重新表述。