Стандартный интерфейс
ReadWriteLock предоставляет потокобезопасный разделенный доступ на чтение и на запись. Для этих целей в нём объявлены два метода:
readLock() и
writeLock(). Они возвращают объекты под интерфейсом
Lock.
Оба типа блокировок одного экземпляра
ReadWriteLock связаны. Пока какой-то поток не заберет блокировку на запись, сколько угодно потоков могут читать не мешая друг другу. Блокировкой
readLock закрывается часть кода с семантикой «только чтения» некоторого условного «ресурса». В критической секции кода
writeLock осуществляется модификация ресурса.
Свойства этих локов защищают программу от ситуаций конкурентной записи ресурса и чтения во время записи. Подобно
copy-on-write коллекциям, этот подход становится выгодным, когда ресурс читают сильно чаще чем модифицируют.
Интерфейс реализуется классом
ReentrantReadWriteLock, который во многом похож на
обычный ReentrantLock.