Назад к вопросам
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(); // Отпускаем блокировку на запись
}
}
}