在Java中测试线程安全性
在Java中测试线程安全性
这个问题已经有了答案:
可能的重复:
是否有可能对一个简单类进行“单元测试”,以确定其是否线程安全?
我具体的情况是一个简单的类,该类对向量进行子集划分:给定白名单的向量位置和输入向量,它将生成一个仅包含白名单位置值的输出向量。我想编写一个单元测试(如果可能的话),以确保如果我们将来重构此类,我们保持它是线程安全的。如果该类不再是线程安全的,该单元测试将失败。我意识到这有些模糊和未定义。
admin 更改状态以发布 2023年5月22日
这恰恰是Java Pathfinder的用途。它的学习曲线有点陡峭,但是用这个工具建立全面的证明确实是可能的。你建立一个场景并使用JPF运行,然后JPF会探索所有可能的线程顺序以查找可能的错误。你需要在你的程序中建立断言让JPF来检查。JPF在执行过程中假定顺序一致性,但你可以使用Java Racefinder插件来证明这一点。
诚然,建立一个正确的证明是困难的,但是确实有可能。如果什么都不做,JPF可以用来帮助你查找一些可能会错过的并发错误。