Работал ли с ReadWriteLock

«Работал ли с ReadWriteLock» — вопрос из категории Многопоточность, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, работал. ReadWriteLock полезен, когда есть частые операции чтения и редкие — записи. Он позволяет нескольким потокам читать данные одновременно, но блокирует всех читателей и писателей при записи.

Пример:

val lock = ReentrantReadWriteLock()

fun readData() {
    lock.readLock().lock()
    try {
        // чтение данных
    } finally {
        lock.readLock().unlock()
    }
}

fun writeData() {
    lock.writeLock().lock()
    try {
        // запись данных
    } finally {
        lock.writeLock().unlock()
    }
}

Нюансы:

  • Может привести к голоданию писателей, если чтение происходит постоянно.
  • Не поддерживает обновление блокировки (read → write без отпускания).
  • Альтернатива — StampedLock с оптимистичным чтением.