В высококонкурентных системах может быть трудно быть уверенным в правильности использования блокировок. В частности, взаимоблокировки могут возникнуть, если блокировки будут получены в том порядке, который не ожидался при получении в правильном порядке в другом потоке.
Существуют инструменты (например, Coverity), которые могут выполнять статический анализ на базе кода и искать "необычные" блокировочные заказы. Я хотел бы изучить другие варианты, чтобы удовлетворить мои потребности.
Существуют ли какие-либо легкие инструменты для инструментария кода Java, которые могут обнаруживать случаи, когда блокировки приобретаются в порядке, отличном от ожидаемого? Я в порядке с явным вызовом блокировки заказов через комментарии/аннотации.
Предпочтение отдается свободным и/или открытым источникам. Просьба также прокомментировать, если нет подходов к этой проблеме.
* Для моих целей легкие средства...
- Если это инструментарий, я все равно могу запустить свою программу с той же базой производительности. Вероятно, деградация 30-50% приемлема.
- Мне не нужно тратить половину дня на взаимодействие с инструментом, чтобы получить "все в порядке". В идеале я должен только заметить, что я использую его, когда есть проблема.
- Если это инструмент, его следует легко отключить для производственных сред.
- Он не должен загромождать мой код в каждом выражении
synchronize
. Как уже упоминалось ранее, я согласен с явным комментированием/аннотированием объектов или классов объектов, которые блокируются относительными упорядочениями.