Sobes.tech
Middle

Qual è il senso dell'utilizzo di ReadWriteLock?

sobes.tech AI

Risposta dell'AI

ReadWriteLock consente a più thread di leggere contemporaneamente una risorsa condivisa, ma solo a un thread di scrivere contemporaneamente. Questo migliora le prestazioni negli scenari in cui la lettura è più frequente della scrittura.

Componenti principali:

  • Read Lock: Può essere detenuto da più thread contemporaneamente.
  • Write Lock: Può essere detenuto da un solo thread. Blocca sia altri scrittori che lettori.

Un comportamento simile senza ReadWriteLock richiederebbe l’uso di synchronized o ReentrantLock, che bloccherebbero tutte le operazioni (lettura e scrittura) mentre un thread mantiene il lock.

Esempio di utilizzo:

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(); // Acquisisce il lock di lettura
        try {
            // Legge i dati
            return data;
        } finally {
            rwLock.readLock().unlock(); // Rilascia il lock di lettura
        }
    }

    public void writeData(String newData) {
        rwLock.writeLock().lock(); // Acquisisce il lock di scrittura
        try {
            // Scrive i dati
            this.data = newData;
        } finally {
            rwLock.writeLock().unlock(); // Rilascia il lock di scrittura
        }
    }
}