MXStat
MXStat
Введите текст для поиска
Расширенный поиск каналов
  • Вход на сайт
  • Каталог
    Каталог каналов Региональные подборки Поиск каналов
    Добавить канал
  • Рейтинги
    Рейтинг каналов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Max
Java

3 Aug, 01:32

Открыть в 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 сценариев и обязательно проверяйте результат под реальной нагрузкой.

250 6
Каталог
Каталог каналов Подборки каналов Поиск каналов Добавить канал
Рейтинги
Рейтинг каналов Max
Контакты
Написать в Max Написать в Telegram Написать на почту
Всякая всячина
Пользовательское соглашение Политика конфиденциальности
Наши каналы
MXStat в Telegram MXStat в Max
Наши боты
MXAuthBot MXAnalyticsBot
Made by TGStat