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 подскажет развёрнутый ответ в реальном времени.