Middle
Qual é a essência do uso de ReadWriteLock?
sobes.tech IA
Resposta da IA
ReadWriteLock permite que múltiplos threads leiam simultaneamente um recurso partilhado, mas apenas um thread pode escrever nele de cada vez. Isto melhora o desempenho em cenários onde a leitura é mais frequente do que a escrita.
Componentes principais:
- Read Lock: Pode ser detido por vários threads simultaneamente.
- Write Lock: Pode ser detido por apenas um thread. Bloqueia tanto outros escritores como leitores.
Um comportamento semelhante sem ReadWriteLock exigiria o uso de synchronized ou ReentrantLock, o que bloquearia todas as operações (leitura e escrita) enquanto um thread mantém o bloqueio.
Exemplo de uso:
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(); // Adquire o bloqueio de leitura
try {
// Lê os dados
return data;
} finally {
rwLock.readLock().unlock(); // Liberta o bloqueio de leitura
}
}
public void writeData(String newData) {
rwLock.writeLock().lock(); // Adquire o bloqueio de escrita
try {
// Escreve os dados
this.data = newData;
} finally {
rwLock.writeLock().unlock(); // Liberta o bloqueio de escrita
}
}
}