Der*_*ice 14 java concurrency instrumentation synchronization
在高度并发的系统中,很难确信您对锁的使用是否正确.具体而言,如果以在另一个线程中以正确顺序获取时未按预期的顺序获取锁,则可能导致死锁.
有一些工具(例如Coverity)可以对代码库进行静态分析并查找"异常"锁定命令.我想探索满足我需求的其他选择.
是否有用于检测Java代码的轻量级工具,可以检测以预期的顺序获取锁定的情况?我可以通过注释/注释显式调用锁定命令.
首选免费和/或开源解决方案.如果有针对此问题的非仪器方法,请也请评论.
*就我的目的而言,轻量级意味着......
synchronize语句中混乱我的代码.如前所述,我可以明确地注释/注释被相对顺序锁定的对象或对象类.我没有使用过 AspectJ,所以不能保证它的易用性。我使用ASM创建了一个自定义代码分析器,这大约花了 2 天的时间。仪器同步的工作应该是类似的。一旦您熟悉了方面,AspectJ 应该会更快、更容易。
我已经为基于 C++ 的服务器实现了死锁检测跟踪。我是这样做的:
<time> <tid> <lockid> <acquiring|releasing> <location in code>Lock A -> Lock B -> Lock C生成对的列表(Lock A, Lock B), (Lock A, Lock C), (Lock B, Lock C)我在好几天都找不到死锁的原因后才这样做,又花了几天的时间来实施,又花了几个小时才找到死锁。
如果您正在考虑在 Java 中使用这种方法,则需要考虑以下事项:
synchronized来保护你的关键部分吗?您使用的是 java.lang.concurrent 中的类吗?(这些可能需要特殊处理/仪器)__FILE__and 。__LINE__ASM 将为您提供类名、方法名和签名。