在高度并发的系统中,可能很难确信您的锁的使用是正确的。具体而言,如果在另一个线程中以正确的顺序获取锁而获取的顺序不是预期的顺序,则会导致死锁。在Java中声明同步的顺序
有一些工具(例如Coverity)可以在代码库上进行静态分析并寻找“异常”的锁定顺序。我想探索其他选择来满足我的需求。
是否有任何轻量级*工具可用于检测Java代码,这些工具可以检测到以预期以外的顺序获取锁的情况?我可以通过注释/注释显式调用锁定命令。
首选免费和/或开源解决方案。请同时评论这个问题是否存在非仪器方法。
*对于我而言,重量轻是指...
- 如果是仪表,我仍然可以使用相同的球场性能运行我的程序。我想,30-50%的降解是可以接受的。
- 我不必花半天的时间与工具进行交互,只是为了获得“好的”。理想情况下,我应该只注意到在出现问题时我正在使用它。
- 如果是仪表,应该很容易在生产环境中禁用。
- 它不应该在每个
synchronize
声明中混淆我的代码。如前所述,我可以明确地评论/注释被相对排序锁定的对象或类的对象。
...这就是为什么Actor模型和STM越来越流行 – 2010-10-28 20:32:34
有人有一个引用java.lang.Thread.holdsLock(Object)的响应被及时删除。我无法自己找到这种方法,谢谢你的指点。不过,我的问题依然存在。 – 2010-10-28 20:48:37
你有没有发现任何像样的事情?我在C++中有非常复杂的死锁检测代码,在我的情况下,我想用我们的Java代码来捕获在C++和/或java端的锁可能会相互干扰并导致死锁的情况。 – Pavel 2015-01-27 02:32:35