Что дороже в Java 1.7 - java.util.concurrent.locks.ReentrantLock или синхронизированный блок? - PullRequest
8 голосов
/ 06 марта 2012

Особенности блокировки, кроме того, какой из них, если либо, дороже? Я не смог найти никаких ориентиров по этому вопросу.

Для ситуаций, когда специальные функции не нужны, есть ли у Lock какие-либо преимущества?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 06 марта 2012

Согласно Weblog Oracle / Дэвида Дайса J2SE 6, 2006 (который я только что нашел путем некоторого поиска в Google), большой разницы нет.Возможно, с тех пор все изменилось, но я сомневаюсь в этом.

См. Также это сравнение Lock и ReentrantLock , которое содержит некоторые тесты (и исходный код теста, вы можете запустить егов блоке synchronized) и устраняет некоторые различия между справедливыми блокировками и недобросовестными блокировками.

Один ответ на этот вопрос: Смешивание synchronized () с ReentrantLock.lock () ссылки на эталон между различными блокировками при использовании коллекций Copy-on-write.

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

3 голосов
/ 06 марта 2012

Коллега написал умный тест сегодня днем ​​и обнаружил, что ReentrantLock более чем в два раза быстрее, чем синхронизированный (более 500 потоков, выполняющих 60 000 итераций), медленнее ухудшается и оказывает меньшее влияние на сборку мусора.

В 1.6 и 1.7 jvms.(В версии 1.5 синхронизация выполнялась намного хуже)

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

3 голосов
/ 06 марта 2012

Блокировка имеет то преимущество, что вам не нужно снимать блокировку тем же способом, в котором вы ее получили;вы можете делать такие вещи, как tryLock() и другие полезные функции, которых нет в базовой синхронизации.

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