Новое Распределяем каналы MAX по категориям и территориям. Читать новость
Загружаем изображение…

💡 **Когда `ReentrantReadWriteLock` быстрее обычного `synchronized`**



Если приложение часто читает данные и редко их изменяет, один эксклюзивный lock может стать узким местом.

`ReentrantReadWriteLock` разделяет блокировки:

- несколько потоков могут одновременно держать `readLock`;
- `writeLock` получает исключительный доступ;
- во время записи блокируются и читатели, и другие писатели.

```java
private final ReentrantReadWriteLock lock =
new ReentrantReadWriteLock();

private final Lock readLock = lock.readLock();
private final Lock writeLock = lock.writeLock();

public String get(String key) {
readLock.lock();
try {
return cache.get(key);
} finally {
readLock.unlock();
}
}

public void put(String key, String value) {
writeLock.lock();
try {
cache.put(key, value);
} finally {
writeLock.unlock();
}
}
```

Такой подход полезен для кешей, справочников и конфигураций, которые постоянно читаются, но обновляются редко.

Однако `ReentrantReadWriteLock` подходит не всегда. При коротких операциях, высокой конкуренции между писателями или частых обновлениях накладные расходы могут оказаться выше, чем у обычного `synchronized` или `ReentrantLock`.

Используйте его для read-heavy сценариев и обязательно проверяйте результат под реальной нагрузкой.
Просмотры: 258
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти