ReentrantReadWriteLock - синхронизированный

Когда мы должны использовать ReentrantReadWriteLock по сравнению с синхронизированным ключевым словом в многопоточной среде в Java?

В чем преимущества использования ReentrantReadWriteLock для синхронизации в Java?

Может ли кто-нибудь привести пример (в Java)?

Спасибо!

Ответ 1

Синхронизированный позволяет в одном потоке за раз.

Блокировки чтения/записи разрешают в нескольких читателях одновременно, но только в том случае, если уже нет писателей. Следовательно, в некоторых сценариях использования мы можем улучшить concurrency, так как популяции читателей могут идти вместе.

Java API документация дает пример классов коллекции, которые, как ожидается, будут иметь больше читателей, чем писателей.

Ответ 2

блокирующая статья Брайана подробно объясняет плюсы и минусы каждого подхода.

Структура Lock совместима замена для синхронизации, которая предлагает множество функций, не предусмотренных синхронизированы, а также реализации, предлагающие лучше производительность. Однако, существование этих очевидных выгоды не являются достаточной причиной всегда предпочитает ReentrantLock синхронизированы. Вместо этого сделайте решение на основе того, нужна сила ReentrantLock. В подавляющее большинство случаев, вы будете не - синхронизация работает просто отлично, работает на всех JVM, понимается более широким кругом разработчиков, и менее подвержен ошибкам. Сохранить фиксацию, когда вам это действительно нужно. В этих случаях, вы будете рады, что у вас есть это.