Утверждение порядка синхронизации в Java

В системах с высокой степенью параллелизма может быть трудно быть уверенным, что вы используете блокировки правильно. В частности, взаимоблокировки могут возникнуть, если блокировки получены в порядке, который не ожидался при получении в надлежащем порядке в другом потоке.

Существуют инструменты (например, Coverity), которые могут выполнять статический анализ на основе кода и искать "необычные" блокировка заказов. Я хотел бы изучить другие варианты, соответствующие моим потребностям.

Существуют ли какие-либо облегченные * инструменты для инструментальной обработки кода Java, которые могут обнаруживать случаи, когда блокировки устанавливаются в порядке, отличном от ожидаемого? Я согласен с явным вызовом приказов о блокировке через комментарии / аннотации.

Предпочтительны бесплатные решения и / или решения с открытым кодом. Пожалуйста, также прокомментируйте, есть ли подходы к этой проблеме, не связанные с инструментарием.

* Для моих целей, облегчение означает ...

  • Если это инструментальные средства, я все равно могу запустить свою программу с тем же приблизительным значением. производительность. Полагаю, ухудшение качества на 30-50% приемлемо.
  • Мне не нужно тратить половину дня на взаимодействие с инструментом, чтобы получить от него «хорошо». В идеале я должен замечать, что использую его только тогда, когда возникает проблема.
  • Если это инструментарий, его должно быть легко отключить для производственной среды.
  • Это не должно загромождать мой код при каждой синхронизации заявление. Как упоминалось ранее, я могу явно комментировать / аннотировать объекты или классы объектов, которые блокируются относительным порядком.
14
задан Derrick Rice 28 October 2010 в 20:33
поделиться