Hardreadwritelock

Что такое ReentrantReadWriteLock?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

ReentrantReadWriteLock — реализация ReadWriteLock: несколько readers читают одновременно, но writer эксклюзивен. Для read-heavy структур данных (cache, index).

ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
Lock r = rwl.readLock();
Lock w = rwl.writeLock();

r.lock(); try { /* читаем — несколько потоков */ } finally { r.unlock(); }
w.lock(); try { /* пишем — эксклюзивно */ } finally { w.unlock(); }
  • Readers не блокируют друг друга, writer ждёт всех readers;
  • Downgrade (write → read в одном потоке) возможен;
  • Upgrade (read → write) невозможен — deadlock;
  • Fair vs nonfair: fair — readers ждут, если есть writer в очереди.

StampedLock (Java 8) — оптимистичная версия: tryOptimisticRead() без lock, validate(stamp) проверяет отсутствие write, иначе upgrade до read lock. Быстрее RWLock для read-heavy.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.