Назад к вопросам
Middle
109
questionbank

В чем суть использования ReadWriteLock?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

ReadWriteLock позволяет множеству потоков одновременно читать разделяемый ресурс, но только одному потоку одновременно писать в него. Это повышает производительность в сценариях, где чтение встречается чаще, чем запись.

Основные компоненты:

  • Read Lock: Может удерживаться несколькими потоками одновременно.
  • Write Lock: Может удерживаться только одним потоком. Блокирует как других писателей, так и читателей.

Аналогичное поведение без ReadWriteLock потребовало бы использования synchronized или ReentrantLock, что блокировало бы все операции (чтение и запись) во время удержания блокировки любым потоком.

Пример использования:

import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

class SharedResource {
    private final ReadWriteLock rwLock = new ReentrantReadWriteLock();
    private String data = "Initial Data";

    public String readData() {
        rwLock.readLock().lock(); // Получаем блокировку на чтение
        try {
            // Чтение данных
            return data;
        } finally {
            rwLock.readLock().unlock(); // Отпускаем блокировку на чтение
        }
    }

    public void writeData(String newData) {
        rwLock.writeLock().lock(); // Получаем блокировку на запись
        try {
            // Запись данных
            this.data = newData;
        } finally {
            rwLock.writeLock().unlock(); // Отпускаем блокировку на запись
        }
    }
}