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