Middle
276
Na czym polega istota korzystania z ReadWriteLock?
Odpowiedź od AI
sobes.tech AI
ReadWriteLock pozwala wielu wątkom jednoczesne czytanie współdzielonego zasobu, ale tylko jednemu wątkowi na raz na pisanie do niego. To zwiększa wydajność w scenariuszach, gdzie odczyt jest częstszy niż zapis.
Główne komponenty:
- Read Lock: Może być utrzymywany przez wiele wątków jednocześnie.
- Write Lock: Może być utrzymywany tylko przez jeden wątek. Blokuje zarówno innych pisarzy, jak i czytelników.
Podobne zachowanie bez ReadWriteLock wymagałoby użycia synchronized lub ReentrantLock, co blokowałoby wszystkie operacje (odczyt i zapis) podczas utrzymywania blokady przez dowolny wątek.
Przykład użycia:
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(); // Uzyskujemy blokadę odczytu
try {
// Odczyt danych
return data;
} finally {
rwLock.readLock().unlock(); // Zwolnienie blokady odczytu
}
}
public void writeData(String newData) {
rwLock.writeLock().lock(); // Uzyskujemy blokadę zapisu
try {
// Zapis danych
this.data = newData;
} finally {
rwLock.writeLock().unlock(); // Zwolnienie blokady zapisu
}
}
}