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
}
}
}