ReadWriteLock
– это интерфейс расширяющий базовый интерфейс Lock
. Используется для улучшения производительности в многопоточном процессе и оперирует парой связанных блокировок (одна — для операций чтения, другая — для записи). Блокировка чтения может удерживаться одновременно несколькими читающими потоками, до тех пор, пока не появится записывающий. Блокировка записи является эксклюзивеной.
Существует реализующий интерфейс ReadWriteLock
класс ReentrantReadWriteLock
, который поддерживает до 65535 блокировок записи и до стольки же блокировок чтения.
ReadWriteLock rwLock = new ReentrantReadWriteLock(); Lock rLock = rwLock.readLock(); Lock wLock = rwLock.writeLock(); wLock.lock(); try { // exclusive write } finally { wLock.unlock(); } rLock.lock(); try { // shared reading } finally { rLock.unlock(); }