Sobes.tech
Middle
275

V čem spočívá podstata použití ReadWriteLock?

Odpověď od AI

sobes.tech AI

ReadWriteLock umožňuje více vláknům současně číst sdílený zdroj, ale pouze jedno vlákno může současně zapisovat. To zvyšuje výkon v scénářích, kde je čtení častější než zápis.

Hlavní komponenty:

  • Read Lock: Může být držen více vlákny současně.
  • Write Lock: Může být držen pouze jedním vláknem. Blokuje ostatní čtenáře i zapisovatele.

Podobné chování bez ReadWriteLock by vyžadovalo použití synchronized nebo ReentrantLock, což by blokovalo všechny operace (čtení i zápis) během držení zámku jakýmkoli vláknem.

Příklad použití:

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(); // Získání zámku pro čtení
        try {
            // Čtení dat
            return data;
        } finally {
            rwLock.readLock().unlock(); // Uvolnění zámku pro čtení
        }
    }

    public void writeData(String newData) {
        rwLock.writeLock().lock(); // Získání zámku pro zápis
        try {
            // Zápis dat
            this.data = newData;
        } finally {
            rwLock.writeLock().unlock(); // Uvolnění zámku pro zápis
        }
    }
}