Sobes.tech
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
        }
    }
}